regex 如何在VBA中使用正则表达式替换第n个匹配项?

ruarlubt  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(202)

我试着用“你好”替换“这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
w1jd8yoj

w1jd8yoj1#

你需要使用

=RegexReplace("This 9 is 8 a 77 6 test","^(\D*\d+\D+)\d+","$1hello")

请参见regex demo

  • 详细信息 *:
  • ^-字符串开始
  • (\D*\d+\D+)-第1组:零个或多个非数字+一个或多个数字+一个或多个非数字(此值将在结果中使用编号的替换反向引用$1恢复)
  • \d+-一个或多个数字。

要替换第三个数字,可以将模式重构为^(\D*(?:\d+\D+){2})\d+,注意捕获和非捕获括号的位置。

相关问题