VBA-Regex

Inhaltsverzeichnis

Dieses Tutorial zeigt, wie Sie Regex in VBA verwenden.

Was ist Regex?

Regex steht für regulären Ausdruck. Ein regulärer Ausdruck ist ein Muster, das aus einer Folge von Zeichen besteht, mit dem Sie ein passendes Muster in einer anderen Zeichenfolge finden können. Um Regex in VBA zu verwenden, müssen Sie das RegExp-Objekt verwenden.

Ein Muster wie [A-C] kann verwendet werden, um einen Großbuchstaben von A bis C aus einer Sequenz zu suchen und zu finden. Regex-Muster haben ihre eigene Syntax und können mit einem Zeichen oder einer Zeichenfolge erstellt werden.

Passende Charaktere

Die folgende Tabelle zeigt die Syntax, mit der Sie Regex-Muster erstellen können.

Mustersyntax Beschreibung Beispiel Matchs gefunden
. Entspricht jedem einzelnen Zeichen außer vbNewLine f.n fan, fon, f@n, fwn
[Zeichen] Entspricht jedem einzelnen Zeichen zwischen Klammern[] [fn] Würde nur mit "f" oder "n" im Fan übereinstimmen
[^Zeichen] Entspricht jedem einzelnen Zeichen, das nicht in Klammern steht[] [^fn] Würde also mit „j“ in „fjn“ übereinstimmen
[Start Ende] Entspricht jedem Zeichen, das Teil des Bereichs in Klammern ist[] [1-5] Würde mit „4“ und „5“ in „45“ übereinstimmen
\w Entspricht alphanumerischen Zeichen und dem Unterstrich, aber nicht dem Leerzeichen \w Würde mit „c“ in „,c“ übereinstimmen.
\W Entspricht allen nicht-alphanumerischen Zeichen und dem Unterstrich \W Würde mit „@“ in „bb@bb“ übereinstimmen
\S Entspricht jedem Leerzeichen wie Leerzeichen und Tabulatoren \S Würde mit " " in "Das ist" übereinstimmen
\S Entspricht jedem Nicht-Leerraum-Zeichen \S Würde "T" und "h" in "T h" entsprechen
\D Entspricht jeder einzelnen Dezimalstelle \D Würde mit „7“ in „a7h“ übereinstimmen
\D Entspricht einer einzelnen nicht-dezimalen Ziffer \D Würde mit j in "47j" übereinstimmen
\ Entfernt Sonderzeichen, sodass Sie danach suchen können \. Entspricht "." in „59.pQ“
\T Tab \T Würde einem Tabulatorzeichen entsprechen
\R Wagenrücklauf \R Würde einem Wagenrücklauf (vbCr) entsprechen
\n vbNewLine(vbTab) \n Würde zu einer neuen Zeile passen

Quantifizierer

Sie können Quantifizierer verwenden, um anzugeben, wie oft das Muster mit der Zeichenfolge abgeglichen werden soll.

Quantor Beschreibung Beispiel Matchs gefunden
* Stimmt mit null oder mehr Vorkommen überein fn*a fna, fa, fnna, fnnna, fnfnnna
+ Entspricht einem oder mehreren Vorkommen fn+a fna, fnna, fnfnna
? Entspricht null oder eins fn?a fa, fna
{n} Stimmt oft mit „n“ überein d\W{4} Würde mit „d…“ übereinstimmen. in „d… .&5hi“
{n,} Stimmt mindestens „n“ oft überein d\W{4,} Entspricht „d… .&“ in „d… .&5hi“
{n, m} Übereinstimmungen zwischen n und m oft d\W{1,8} Entspricht "d… .&&&&" in "d… .&&&&5hi"

Gruppierung

Durch das Gruppieren oder Erfassen können Sie ein Muster verwenden, um einen Teil einer Zeichenfolge zu erfassen und zu extrahieren. Es wird also nicht nur das Muster abgeglichen, sondern der Teil der Zeichenfolge, der dem Muster entspricht, wird erfasst.

Muster Beschreibung Beispiel Übereinstimmungen gefunden und gefangen
(Ausdruck) Gruppiert und erfasst das Muster in Klammern (\W{4}) Würde "@@@@" aus "1@@@@1jlmba" gruppieren und erfassen

So verwenden Sie Regex in VBA

Um Regex in VBA verwenden zu können, müssen Sie zunächst die Referenz im VBE-Editor setzen. Gehen Sie im VBE-Editor zu Extras > Referenzen > Reguläre Ausdrücke in Microsoft VBScript.

Dies sind die Eigenschaften des RegExp-Objekts:

  • Muster - Das Muster, das Sie für den Abgleich mit der Zeichenfolge verwenden werden.
  • Fall ignorieren - Bei True ignoriert das Matching die Groß-/Kleinschreibung.
  • Global - Bei True werden alle Übereinstimmungen des Musters in der Zeichenfolge gefunden. Bei False wird nur die erste Übereinstimmung gefunden.
  • MultiLine - Bei True erfolgt die Musterübereinstimmung über Zeilenumbrüche hinweg.

Dies sind die Methoden des RegExp-Objekts:

  • Prüfen - Sucht nach einem Muster in einem String und gibt True zurück, wenn eine Übereinstimmung gefunden wird.
  • Ersetzen - Ersetzt die Vorkommen des Musters durch die Ersatzzeichenfolge.
  • Ausführen - Gibt Übereinstimmungen des Musters mit der Zeichenfolge zurück.

Testen eines Musters auf Übereinstimmung mit einer Zeichenfolge

Mit der Methode Test können Sie überprüfen, ob ein Muster mit einer Sequenz in der Eingabezeichenfolge übereinstimmt. Das Ergebnis ist True, wenn eine Übereinstimmung gefunden wird. Der folgende Code zeigt Ihnen, wie Sie ein Muster mit einer Zeichenfolge testen:

12345678910111213 Unter RegexTestingAPattern()Dim stringOne As StringRegexOne als Objekt dimmenSet regexOne = New RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test(stringOne)End Sub

Das Ergebnis ist:

Ersetzen eines Musters in einer Zeichenfolge

Mit der Methode Replace können Sie die erste Instanz eines übereinstimmenden Musters in einer Zeichenfolge oder alle Instanzen eines übereinstimmenden Musters in einer Zeichenfolge ersetzen. Wenn Global auf False gesetzt ist, wird nur die erste Instanz ersetzt. Der folgende Code zeigt Ihnen, wie Sie ein Muster in einer Zeichenfolge ersetzen:

1234567891011 Sub RegexReplaceingAPattern()Dim stringOne As StringRegexOne als Objekt dimmenSet regexOne = New RegExpregexOne.Pattern = "Das ist die Nummer"regexOne.Global = FalsestringOne = "Das ist die Nummer 718901"Debug.Print regexOne.Replace(stringOne, "Das ist die neue Zahl")End Sub

Das Ergebnis ist:

Um nur den Zahlenteil der oben verwendeten Zeichenfolge zu ersetzen, verwenden Sie den folgenden Code:

1234567891011 Sub RegexReplaceingAPattern()Dim stringOne As StringRegexOne als Objekt dimmenSet regexOne = New RegExpregexOne.Pattern = "[^\D]+"regexOne.Global = FalsestringOne = "Das ist die Nummer 718901"Debug.Print regexOne.Replace(stringOne, "777192")End Sub

Das Ergebnis ist:

Um jede Instanz eines bestimmten Musters in einer Zeichenfolge zu ersetzen, würden Sie den globalen Wert auf True setzen. Der folgende Code zeigt Ihnen, wie Sie jede Instanz von -A1289C- in der Zeichenfolge ersetzen:

1234567891011 Sub RegexReplacecingEveryInstanceOfAPattern()Dim stringOne As StringRegexOne als Objekt dimmenSet regexOne = New RegExpregexOne.Pattern = "\W\A\d+C\W"regexOne.Global = TruestringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace(stringOne, "IJK")End Sub

Abgleichen und Anzeigen eines Musters in einer Zeichenfolge

Sie können die Execute-Methode verwenden, um eine oder alle Instanzen eines Musters innerhalb einer Zeichenfolge abzugleichen. Der folgende Code zeigt Ihnen, wie Sie alle Instanzen des Musters aus der Zeichenfolge abgleichen und anzeigen:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern()Dim stringOne As StringRegexOne als Objekt dimmenSet regexOne = New RegExpregexOne.Pattern = "AC"regexOne.Global = TrueregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Set theMatches = regexOne.Execute(stringOne)Für jedes Match in theMatchesDebug.Print Match.ValueNächsteEnd Sub

Das Ergebnis ist:

Nehmen wir an, wir wollten nur -ADC- aus der obigen Zeichenfolge abgleichen. Der folgende Code zeigt, wie nur -ADC- aus der Zeichenfolge abgeglichen und angezeigt wird:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern()Dim stringOne As StringRegexOne als Objekt dimmenSet regexOne = New RegExpregexOne.Pattern = "\-\A.C\-"regexOne.Global = FalseregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Set theMatches = regexOne.Execute(stringOne)Für jedes Spiel in theMatchesDebug.Print Match.ValueNächsteEnd Sub

Regex kann einige Zeit in Anspruch nehmen, um es zu lernen, aber es ist ein äußerst leistungsfähiges Werkzeug zum Identifizieren/Manipulieren von Textzeichenfolgen. Es wird auch in vielen Programmiersprachen verwendet.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave