Это очень похоже на этот ответ Я уже давал.
К счастью, .NET имеет сбалансированное соответствие .
Так что вы можете сделать это:
(<textarea[^>]*>[^<>]*(((?<Open><)[^<>]*)+((?<Close-Open>>)[^<>]*)+)*(?(Open)(?!))</textarea>)|\r\n
Затем вы можете выполнить замену на 1 доллар.
Вот оно в действии:
http://regexhero.net/tester/?id=292c5529-5fe8-42e9-8d72-d7ea9ab9e1fe
Надеюсь, это поможет. Преимущество такого сбалансированного соответствия заключается в том, что он достаточно мощный, чтобы обрабатывать вложенные теги, свойственные HTML.
Однако, это все еще не на 100% надежно. Комментарии еще могут скинуть. И, конечно, это также безумно сложное регулярное выражение, которым нужно управлять, если вам когда-либо понадобится внести изменения. Так что вы все равно можете захотеть использовать html-парсер.