使用正则表达式在字符串中查找和替换模式的所有实例

4

使用Excel VBA,我正在尝试替换所有看起来像这样的简单模式:

{some text}

该段文本中涉及到一些常量字符串。因此,我希望找到所有被花括号包含的文本,并将其替换为另一个字符串。

我使用以下代码:

Dim regEx As Object
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "\{.*?\}"
qtext = regEx.Replace(qtext, html_input)

其中qtexthtml_input是一些字符串。但这仅替换模式的第一个实例。

例如:

qtext = "yadda yadda {1:NM:=12.000:0.120} omtty doom {1:NM:=6/6} loppy loop"
html_input = "I am HTML"

结果应该是:

"yadda yadda I am HTML omtty doom I am HTML loppy loop"

但是我得到的结果是:

"yadda yadda I am HTML omtty doom {1:NM:=6/6} loppy loop"

我漏掉了什么?


9
尝试添加"regEx.Global = True"。 - SJR
1
@SJR你应该将它发布为答案,这样未来的用户可以轻松找到答案。 - Shai Rado
1个回答

12
正如@SJR在他们的评论中所说,您需要将正则表达式对象的Global属性设置为True。该属性在MSDN上有描述:

Global - 一个布尔属性,指示正则表达式是否应针对字符串中所有可能的匹配进行测试。默认情况下,Global设置为False。

因此,在您的代码中变为:
Option Explicit

Sub ReplaceText()

    Dim regEx As Object
    Dim qtext As String
    Dim html_input As String

    ' set up regex
    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Pattern = "\{.*?\}"
    regEx.Global = True '<-- set flag to true to replace all occurences of match

    ' input and replacement text
    qtext = "yadda yadda {1:NM:=12.000:0.120} omtty doom {1:NM:=6/6} loppy loop"
    html_input = "I am HTML"

    ' do replace
    qtext = regEx.Replace(qtext, html_input)

    ' test output
    MsgBox qtext

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接