2017-07-04 3 views
1

mit Excel VBA, versuche ich, alle Instanzen von einem einfachen Muster zu ersetzen, die wie folgt aussieht:finden und alle Instanzen eines Musters in einer Zeichenfolge ersetzen mit regulären Ausdrücken

{some text} 

mit einem anderen konstanten String . Ich möchte also den ganzen Text finden, der in geschweifte Klammern eingeschlossen ist und (mit den geschweiften Klammern) durch eine andere Zeichenfolge ersetzen soll.

Ich verwende den folgenden Code ein:

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

wo qtext und html_input sind einige Saiten. Dies ersetzt jedoch nur die erste Instanz des Musters.

Zum Beispiel:

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

Und das Ergebnis sollte sein:

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

Aber was ich bekommen ist:

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

Was bin ich?

+6

Versuchen Hinzufügen 'regEx.Global = true'. – SJR

+1

@SJR sollten Sie es als Antwort veröffentlichen, damit zukünftige Benutzer die Antwort leicht finden können –

Antwort

3

Wie @SJR in ihrem Kommentar sagte, müssen Sie die Global Eigenschaft des Regex-Objekts auf True setzen. Die Eigenschaft ist unter MSDN:

beschrieben. Global - Eine boolesche Eigenschaft, die angibt, ob der reguläre Ausdruck für alle möglichen Übereinstimmungen in einer Zeichenfolge getestet werden soll. Standardmäßig ist Global auf False festgelegt.

So in Ihrem Code wird:

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 
Verwandte Themen