Хорошо, после некоторого времени попыток построить подходящее регулярное выражение, вот моя попытка .. Это может потребовать дополнительной работы, но должно указать вам правильное направление.
Я сопоставляю слова "word1" и "word2", а не внутри тега "tag1" или "tag2". Конечно, вам нужно настроить это под свои нужды. Включите RegexOptions.IgnorePatternWhitespace
, если хотите сохранить мое форматирование.
К сожалению, я придумала регулярное выражение, которое вы могли бы просто подключить к Regex.Replace, так как это регулярное выражение будет соответствовать всей строке после предыдущего совпадения, но слово, которое вас интересует, находится в первой группе. Эта группа содержит индекс и длину слова, поэтому вы можете легко заменить его, используя String.Substring
...
(?:
\G
(?:
(?>
<tag1(?<N>)
|<tag2(?<N>)
|</tag1(?<-N>)
|</tag2(?<-N>)
|.)*?
(?(N)(?!))
)*
)
(word1|word2)