正则表达式只替换一次

时间:2017-12-14 07:48:58

标签: c# .net regex

如果以前曾经问过这个问题,我很抱歉,我根本不知道如何用一种方式来表达它,以获得可用的结果。

我正在使用.net框架用字符串“查找和替换”字符串,但是使用反向引用技术将其包含在HTML标记中。

pText = Regex.Replace("aa", "aa likes bb", "<span class='cat'>$0</span>", RegexOptions.IgnoreCase)

这个工作正常,直到我想要替换的关键字已被替换为更大词的一部分。

例如 - using the keywords aa, bb, aabb

aa likes bb变为<span class="aa">aa</span> likes <span class="bb">bb</span>.

然而:

aa likes aabb变为<span class="aa">aa</strong> likes <span class="aabb"><span class="aa">aa</span>bb</span>

我以某种方式需要它来确定替换已经发生,并呈现为

enter image description here

2 个答案:

答案 0 :(得分:0)

尝试在您要搜索的关键字周围使用字词边界。例如,正则表达式\baa\b仅匹配文本aa likes aabb中第一次出现的aa,而不是匹配它的两次出现。

答案 1 :(得分:0)

不完全确定这是否可以作为一个答案,但作为一个完整的问题,如果其他人在这里以同样的方式结束,我绝对会过度思考这个。

我没有调整任何正则表达式/代码,而只是应用了以下LESS / CSS规则。

.fa-metal(@Color){
    background-color: @Color;
    padding: 1px 4px;
    border-radius: 4px;
    border: 1px solid darken(@Color, 10%);

    /*Ensure that a code inside a code will not be rendered*/
    .fa-bronze, .fa-silver, .fa-gold {
        background-color: transparent;
        padding: 0;
        border-radius: 0;
        border: none;
    }
}

这样,当一个类被双重替换时,只渲染最外面的跨度。 (HTML源码充斥着不必要的跨度,但我可以忍受这种情况)