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

EBH*_*EBH 1 regex excel vba excel-vba excel-2013

使用Excel VBA,我试图替换一个看起来像这样的简单模式的所有实例:

{some text}
Run Code Online (Sandbox Code Playgroud)

与其他一些常量字符串.所以我想找到括在花括号中的所有文本,并用另一个字符串替换(带花括号).

我使用以下代码:

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

在哪里qtexthtml_input是一些字符串.但这只会替换模式的第一个实例.

例如:

qtext = "yadda yadda {1:NM:=12.000:0.120} omtty doom {1:NM:=6/6} loppy loop"
html_input = "I am HTML"
Run Code Online (Sandbox Code Playgroud)

结果应该是:

"yadda yadda I am HTML omtty doom I am HTML loppy loop"
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

"yadda yadda I am HTML omtty doom {1:NM:=6/6} loppy loop"
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Rob*_*zie 5

正如@SJR在评论中所说,你需要Global将regex对象的属性设置为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
Run Code Online (Sandbox Code Playgroud)