我看过一些类似的话题,但是找不到我正在寻找的东西,所以即时提问。
是否可以只替换与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
答案 0 :(得分:5)
是的,有两种方法可以做到这一点:
使用capturing group存储您要保留的部分:
Dim PhoneNumber AS String = Regex.Replace(IndexString, "\b00([1-9]{2})", "+$1")
这里,括号捕获正则表达式的相关部分(它们按顺序编号),您可以使用$1
在替换字符串中返回其内容,以匹配第一个组{{1对于第二组等(以及整个匹配的$2
)。
使用positive lookahead assertion:
$0
此处,Dim PhoneNumber AS String = Regex.Replace(IndexString, "\b00(?=[1-9]{2})", "+")
仅断言可能匹配当前位置的(?=...)
,而不实际使其成为匹配的一部分。这个解决方案可能比第一个解决方案更快。
还有一件事:您应该使用word boundary anchor(...
)来确保您不会在数字中间意外匹配\b
- 您可能不会希望00
成为00493010023456
,是吗?
答案 1 :(得分:2)
您可以使用前瞻只匹配您想要的内容:
Regex.Replace(IndexString, "00(?=[1-9]{2}))", "+")
(?=...)
是一个零宽度断言,仅当内部匹配时匹配,因此它将执行您想要的检查而不选择NN
。