正则表达式替换 - 但有一些例外

时间:2010-03-11 10:46:42

标签: c# .net asp.net html regex

我有一个包含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-标签。

有人能想出这个吗?

2 个答案:

答案 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)