RegEx仅取代部分比赛

时间:2014-04-03 13:06:59

标签: regex vb.net replace

我看过一些类似的话题,但是找不到我正在寻找的东西,所以即时提问。

是否可以只替换与RegEx匹配的字符串的一部分?

例如

我想将00NN替换为+NN。只是对所有00+进行简单替换不是一种选择。

RegEx下方在1-9之间找到2个零和2个跟随数字。

Dim PhoneNumber AS String = Regex.Replace(IndexString, "([0][0][1-9]{2})", "+")

这会将整个00NN替换为+,如果可以让替换保留以下NN,那么它会将00NN替换为+NN

2 个答案:

答案 0 :(得分:5)

是的,有两种方法可以做到这一点:

  1. 使用capturing group存储您要保留的部分:

    Dim PhoneNumber AS String = Regex.Replace(IndexString, "\b00([1-9]{2})", "+$1")

    这里,括号捕获正则表达式的相关部分(它们按顺序编号),您可以使用$1在替换字符串中返回其内容,以匹配第一个组{{1对于第二组等(以及整个匹配的$2)。

  2. 使用positive lookahead assertion

    $0

    此处,Dim PhoneNumber AS String = Regex.Replace(IndexString, "\b00(?=[1-9]{2})", "+")仅断言可能匹配当前位置的(?=...),而不实际使其成为匹配的一部分。这个解决方案可能比第一个解决方案更快。

  3. 还有一件事:您应该使用word boundary anchor...)来确保您不会在数字中间意外匹配\b - 您可能不会希望00成为00493010023456,是吗?

答案 1 :(得分:2)

您可以使用前瞻只匹配您想要的内容:

Regex.Replace(IndexString, "00(?=[1-9]{2}))", "+")

(?=...)是一个零宽度断言,仅当内部匹配时匹配,因此它将执行您想要的检查而不选择NN