У меня проблема с сопоставлением не-HTML тегов в тексте в основном, потому что теги начинаются с <
и заканчиваются >
, но не <
и >
. Поэтому вместо <ref>xx</ref>
у меня есть <ref>xxx</ref>
. Что мне нужно сделать, это удалить все такие теги, включая их содержимое.
Проблема в том, что некоторые теги могут иметь атрибуты. Я нашел хороший ответ здесь но все же есть проблема.
Предполагая, что у меня есть тег вроде: <gallery src=sss>xxx</gallery>
это выражение подходит идеально:
@"<(?<Tag>\w+)[^>)]*>.*?</\k<Tag>>"
Реальность совсем другая, и все специальные символы экранированы, поэтому тег выглядит так: <gallery src=sss>xxx</gallery>
. Моя проблема состоит в том, чтобы соответствовать этому королю тегов. Пока у меня есть это выражение:
@"\<\;(?<Tag>\w+)[^\&)]*\>\;.*?\<\;/\k<Tag>\>\;"
. Он совпадает с тегами без атрибутов, но не с упомянутыми выше. Чего мне не хватает?
Вторая проблема связана с тегами {| |}
, поскольку они могут быть вложенными. Можете ли вы помочь мне с этим также? Это выражение не выполняет работу: @"\{\|(?:[^\|\}]|\{\|[^\|\}]*\|\})*\|\}"
Редактировать : Уточнить второй вопрос. Я должен сопоставить строки, которые начинаются с открывающего тега {|
, затем идут текст и заканчиваются тегами |}
. Эта структура может быть вложенной, поэтому: {| xxx {| yyy |} xxx |}
разрешено. К сожалению, я не знаю максимального уровня вложенности, но допустим, что 1 подходит для большинства случаев.
Редактировать 2 : Это выражение работает для моего 1-го выпуска @"\<\;(?<Tag>\w+).*?\<\;/\k<Tag>\>\;"
. Я заметил, что произойдет сбой, если между открывающим и закрывающим тегами будет новая отметка.
Редактировать 3 : Это работа со вторым выпуском: @"\{\|(?>(?!\{\||\|\}).|\{\|(?<N>)|\|\}(?<-N>))*(?(N)(?!))\|\}"