我有一个包含HTML的字符串,我需要将一些单词替换为链接 - 我使用以下代码执行此操作;
string lNewHTML = Regex.Replace(lOldHTML, "(\bword1\b|\bword2|word3\b)", "<a href=\"page.aspx#$1\">$1</a>", RegexOptions.IgnoreCase);
代码有效,但我需要在替换中包含一些例外 - 例如我不会替换任何img,li和a-tag(包括链接文本和href和title等属性),但仍允许替换p-,td-和div-标签。
有人能想出这个吗?
答案 0 :(得分:1)
您需要将Replace重置与MatchEvaluator参数一起使用,以便检查每个匹配并决定是否替换。
答案 1 :(得分:1)
好的,经过一段时间尝试构建一个拟合的正则表达式,在这里我尝试..这可能需要额外的工作,但应该指向正确的方向。
我匹配单词“word1”和“word2”,而不是“tag1”或“tag2”标签内。当然,您需要根据自己的需要进行调整。如果您想保留格式,请启用RegexOptions.IgnorePatternWhitespace
。
不幸的是,我提出了一个正则表达式,你可以简单地插入Regex.Replace,因为这个正则表达式将匹配之前的匹配整个字符串,但你关注的词是在第一组。该组包含单词的索引和长度,因此您可以使用String.Substring
...
(?:
\G
(?:
(?>
<tag1(?<N>)
|<tag2(?<N>)
|</tag1(?<-N>)
|</tag2(?<-N>)
|.)*?
(?(N)(?!))
)*
)
(word1|word2)