Вопрос слишком широкий, чтобы на него можно было ответить однозначно. Вы говорите об удалении всех тегов из реального HTML-документа, например веб-страницы? Если это так, вам придется:
- удалить объявление <! DOCTYPE или <? Xml пролог, если они существуют </li>
- удалить все комментарии SGML
- удалить весь элемент HEAD
- удалить все элементы SCRIPT и STYLE
- делать Grabthar-знает-что с элементами FORM и TABLE
- удалить оставшиеся теги
- удалить последовательности <! [CDATA [и]]> из разделов CDATA, но оставить их содержимое в покое
Это только у меня в голове - я уверен, что это еще не все. Сделав все это, вы получите слова, предложения и абзацы, собранные вместе в некоторых местах, и большие куски бесполезного пробела в других.
Но, если вы работаете только с фрагментом и можете просто удалить все теги, вот регулярное выражение, которое я бы использовал:
@"(?></?\w+)(?>(?:[^>'""]+|'[^']*'|""[^""]*"")*)>"
Сопоставление строк с одинарными и двойными кавычками в их собственных альтернативах достаточно для решения проблемы угловых скобок в значениях атрибутов. Я не вижу необходимости явно сопоставлять имена атрибутов и другие вещи внутри тега, как это делает регулярное выражение в ответе Райана; первая альтернатива обрабатывает все это.
Если вам интересны эти (?>...)
конструкции, то они атомные группы . Они делают регулярные выражения немного более эффективными, но, что более важно, они предотвращают повторное отслеживание, что вы всегда должны учитывать при смешивании чередующихся и вложенных квантификаторов, как я это сделал. Я не думаю, что это было бы проблемой здесь, но я знаю, что если я не упомяну это, кто-то еще скажет. ; -)
Это регулярное выражение, конечно, не идеально, но, вероятно, оно так хорошо, как вам когда-либо понадобится.