Regex 正则表达式仅替换部分匹配项

Regex 正则表达式仅替换部分匹配项,regex,vb.net,replace,Regex,Vb.net,Replace,我看了一些类似的主题,但找不到我想要的,所以我问了一个新问题 是否可以只替换与正则表达式匹配的字符串的一部分? 比如说 我想将00NN替换为+NN。仅对所有00到+进行简单的替换是不可取的 下面的正则表达式定位2个0和2个1-9之间的数字 Dim PhoneNumber AS String = Regex.Replace(IndexString, "([0][0][1-9]{2})", "+") 这会将整个00NN替换为+,如果可以让替换保留以下NN,那么它会将00NN替换为+NN您可以使用l

我看了一些类似的主题,但找不到我想要的,所以我问了一个新问题

是否可以只替换与正则表达式匹配的字符串的一部分?

比如说

我想将
00NN
替换为
+NN
。仅对所有
00
+
进行简单的替换是不可取的

下面的正则表达式定位2个0和2个1-9之间的数字

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

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

您可以使用lookaheads仅匹配您想要的内容:

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

(?=…)
是一个零宽度断言,仅当内部匹配时才匹配,因此它将执行您想要的检查,而无需选择
NN
您可以使用lookaheads仅匹配您想要的:

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

(?=…)
是一个零宽度断言,仅当内部内容匹配时才匹配,因此它将执行您想要的检查,而无需选择
NN
是的,有两种方法:

  • 使用存储要保留的零件:

    Dim PhoneNumber作为String=Regex.Replace(IndexString,“\b00([1-9]{2})”,“+$1”)

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

  • 使用:

    Dim PhoneNumber作为String=Regex.Replace(IndexString,“\b00(?=[1-9]{2})”,“+”

    这里,
    (?=…)
    仅声明可以在当前位置匹配
    ,而不实际将其作为匹配的一部分。此解决方案可能比第一个解决方案快


  • 另外一件事:您应该使用(<代码> \b/COD>)以确保在一个数字中不意外地匹配<代码> 00 >代码> -您可能不希望<代码> 00493010023456 > /代码>成为<代码> + 49301 + 23456 < /代码>,是吗? <是的,有两种方式来做:

  • 使用存储要保留的零件:

    Dim PhoneNumber作为String=Regex.Replace(IndexString,“\b00([1-9]{2})”,“+$1”)

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

  • 使用:

    Dim PhoneNumber作为String=Regex.Replace(IndexString,“\b00(?=[1-9]{2})”,“+”

    这里,
    (?=…)
    仅声明可以在当前位置匹配
    ,而不实际将其作为匹配的一部分。此解决方案可能比第一个解决方案快


  • 另外一件事:你应该使用(<代码> \b/COD>)确保你在数字中间不意外地匹配<代码> 00代码/> >你可能不希望<代码> 00493010023456 >代码>成为<代码> + 49301 + 23456 < /代码>,对吗?工作完美!杰出的工作完美!谢谢捕获组非常有趣,这将帮助我解决其他问题;)@Kaynlson-虽然这可能会让第一人称失望,而且我们知道Tim已经有很多名气了,但如果你认为Tim的答案真的是最好的,你可能应该取消选择第一个选择的答案,然后选择Tim的(只要确保你在第一人称的答案仍然是好答案的情况下投票给它)-这样以后来这里的人可以先看到最好的答案。@Tim-你是说用

    preserve
    而不是
    preserve
    ?只是一个thought@CodeJockey:很可能:)我似乎一直在使用这个词,认为它的意思是它没有的东西…@TimPietzcker it的意思很接近。。。大多数人都听不懂,但我不认为这是对的,也许有问答环节,谢谢!捕获组非常有趣,这将帮助我解决其他问题;)@Kaynlson-虽然这可能会让第一人称失望,而且我们知道Tim已经有很多名气了,但如果你认为Tim的答案真的是最好的,你可能应该取消选择第一个选择的答案,然后选择Tim的(只要确保你在第一人称的答案仍然是好答案的情况下投票给它)-这样以后来这里的人可以先看到最好的答案。@Tim-你是说用
    preserve
    而不是
    preserve
    ?只是一个thought@CodeJockey:很可能:)我似乎一直在使用这个词,认为它的意思是它没有的东西…@TimPietzcker it的意思很接近。。。大多数人都听不懂,但我不认为这是对的——也许会有问答