我试着用“你好”替换“这9是8 A 77 6测试”中第二次出现的数字。
所以我希望结果是“这个9是你好A 77 6测试”。
相反,我得到了“你好你好测试”。
我正在使用:
=RegexReplace("This 9 is 8 a 77 6 test","(?:\D*(\d+)){2}","hello")
其中RegexReplace定义如下:
Function RegexReplace(text As String, pattern As String, replace As String)
Static re As Object
If re Is Nothing Then
Set re = CreateObject("VBScript.RegExp")
re.Global = True
re.MultiLine = True
End If
re.IgnoreCase = True
re.pattern = pattern
RegexReplace = re.replace(text, replace)
Set re = Nothing
End Function
1条答案
按热度按时间w1jd8yoj1#
你需要使用
请参见regex demo。
^
-字符串开始(\D*\d+\D+)
-第1组:零个或多个非数字+一个或多个数字+一个或多个非数字(此值将在结果中使用编号的替换反向引用$1
恢复)\d+
-一个或多个数字。要替换第三个数字,可以将模式重构为
^(\D*(?:\d+\D+){2})\d+
,注意捕获和非捕获括号的位置。