VBA Regex

Inhoudsopgave

Deze zelfstudie laat zien hoe u Regex in VBA kunt gebruiken.

Wat is Regex?

Regex staat voor reguliere expressie. Een reguliere expressie is een patroon dat bestaat uit een reeks tekens die u kunt gebruiken om een ​​overeenkomend patroon in een andere tekenreeks te vinden. Om Regex in VBA te gebruiken, moet u het RegExp-object gebruiken.

Een patroon zoals [A-C] kan worden gebruikt om een ​​hoofdletter van A tot C uit een reeks te zoeken en te matchen. Regex-patronen hebben hun eigen syntaxis en kunnen worden gebouwd met behulp van een teken of een reeks tekens.

Overeenkomende karakters

De volgende tabel toont de syntaxis waarmee u Regex-patronen kunt bouwen.

Patroonsyntaxis Beschrijving Voorbeeld Matches gevonden
. Komt overeen met elk afzonderlijk teken behalve vbNewLine v.n fan, fon, f@n, fwn
[karakters] Komt overeen met elk afzonderlijk teken tussen haakjes [] [vn] Komt alleen overeen met "f" of "n" in fan
[^karakters] Komt overeen met elk afzonderlijk teken dat niet tussen haakjes staat [] [^fn] Dus zou overeenkomen met "j" in "fjn"
[begin het einde] Komt overeen met elk teken dat deel uitmaakt van het bereik tussen haakjes [] [1-5] Zou overeenkomen met "4" en "5" in "45"
\w Komt overeen met alfanumerieke tekens en het onderstrepingsteken, maar niet met het spatieteken \w Zou overeenkomen met "c" in ",c."
\W Komt overeen met alle niet-alfanumerieke tekens en het onderstrepingsteken \W Zou overeenkomen met "@" in "bb@bb"
\s Komt overeen met elk witruimteteken zoals spaties en tabs \s Zou overeenkomen met ” ” in “Dit is”
\S Komt overeen met elk niet-witruimteteken \S Zou overeenkomen met "T" en "h" in "T h"
\NS Komt overeen met elk enkel decimaal cijfer \NS Zou overeenkomen met "7" in "a7h"
\NS Komt overeen met een enkel niet-decimaal cijfer \NS Zou overeenkomen met j in "47j"
\ Ontsnapt aan speciale tekens, zodat u ernaar kunt zoeken \. Zou overeenkomen met "." in "59.pQ"
\t Tab \t Zou overeenkomen met een tab-teken
\R Koets Retour \R Zou overeenkomen met een wagenretour (vbCr)
\N vbNieuweLijn(vbTab) \N Zou overeenkomen met een nieuwe regel

Kwantificatoren

U kunt kwantoren gebruiken om aan te geven hoe vaak u wilt dat het patroon overeenkomt met de tekenreeks.

Kwantificator Beschrijving Voorbeeld Matches gevonden
* Komt overeen met nul of meer gebeurtenissen fn*a fna, fa, fnna, fnnna, fnfnnna
+ Komt overeen met een of meer gebeurtenissen fn+a fna, fnna, fnfnna
? Komt overeen met nul of één fn?a fa, fna
{N} Komt vaak overeen met "n" d\W{4} Zou overeenkomen met "d …" in “d… .&5hi”
{N,} Komt minstens "n" aantal keer overeen d\W{4,} Zou overeenkomen met "d… .&" in "d… .&5hi"
{n,m} Matches tussen n en m aantal keren d\W{1,8} Zou overeenkomen met "d… .&&&&" in "d… .&&&&5hi"

Groepering

Met groeperen of vastleggen kunt u een patroon gebruiken om een ​​deel van een tekenreeks vast te leggen en te extraheren. Dus niet alleen het patroon komt overeen, maar het deel van de snaar dat overeenkomt met het patroon wordt vastgelegd.

Patroon Beschrijving Voorbeeld Gevonden en vastgelegde overeenkomsten
(uitdrukking) Groepeert en legt het patroon tussen haakjes vast (\W{4}) Zou groeperen en vastleggen "@@@@" van "1@@@@1jlmba"

Regex gebruiken in VBA

Om Regex in VBA te gebruiken, moet u eerst de referentie in de VBE-editor instellen. Ga in de VBE-editor naar Extra > Referenties > Microsoft VBScript Reguliere Expressies.

Dit zijn de eigenschappen van het RegExp-object:

  • Patroon - Het patroon dat u gaat gebruiken om te matchen met de string.
  • Negeer zaak - Indien True, dan negeert de matching letter case.
  • Globaal - Indien True, dan worden alle overeenkomsten van het patroon in de string gevonden. Indien False dan wordt alleen de eerste match gevonden.
  • MultiLine - Indien waar, vindt patroonovereenkomst plaats over regeleinden heen.

Dit zijn de methoden van het RegExp-object:

  • Toets - Zoekt naar een patroon in een tekenreeks en retourneert True als er een overeenkomst wordt gevonden.
  • Vervangen - Vervangt de voorkomens van het patroon door de vervangende string.
  • uitvoeren - Retourneert overeenkomsten van het patroon tegen de tekenreeks.

Een patroon testen voor een match tegen een string

U kunt de testmethode gebruiken om te controleren of een patroon overeenkomt met een reeks in de invoerreeks. Het resultaat is True als er een match wordt gevonden. De volgende code laat je zien hoe je een patroon test tegen een string:

12345678910111213 Sub RegexTestingAPattern()Dim stringOne As StringDim regexOne als objectStel regexOne in = Nieuwe RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test(stringOne)Einde sub

Het resultaat is:

Een patroon in een string vervangen

U kunt de methode Vervangen gebruiken om de eerste instantie van een overeenkomend patroon in een tekenreeks of alle instanties van een overeenkomend patroon in een tekenreeks te vervangen. Als Globaal is ingesteld op False, wordt alleen de eerste instantie vervangen. De volgende code laat zien hoe je een patroon in een string vervangt:

1234567891011 Sub RegexReplaceingAPattern()Dim stringOne As StringDim regexOne als objectStel regexOne in = Nieuwe RegExpregexOne.Pattern = "Dit is het nummer"regexOne.Global = FalsestringOne = "Dit is het nummer 718901"Debug.Print regexOne.Replace(stringOne, "Dat is het nieuwe nummer")Einde sub

Het resultaat is:

Om alleen het nummergedeelte van de hierboven gebruikte string te vervangen, gebruikt u de volgende code:

1234567891011 Sub RegexReplaceingAPattern()Dim stringOne As StringDim regexOne als objectStel regexOne in = Nieuwe RegExpregexOne.Pattern = "[^\D]+"regexOne.Global = FalsestringOne = "Dit is het nummer 718901"Debug.Print regexOne.Replace(stringOne, "777192")Einde sub

Het resultaat is:

Om elke instantie van een bepaald patroon in een tekenreeks te vervangen, stelt u de globale waarde in op True. De volgende code laat zien hoe je elke instantie van -A1289C- in de string vervangt:

1234567891011 Sub RegexReplacedEveryInstanceOfAPattern()Dim stringOne As StringDim regexOne als objectStel regexOne in = Nieuwe RegExpregexOne.Pattern = "\W\A\d+C\W"regexOne.Global = TruestringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace(stringOne, "IJK")Einde sub

Een patroon in een string matchen en weergeven

U kunt de Execute-methode gebruiken om een ​​of alle instanties van een patroon binnen een tekenreeks te matchen. De volgende code laat zien hoe u alle instanties van het patroon uit de tekenreeks kunt matchen en weergeven:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern()Dim stringOne As StringDim regexOne als objectStel regexOne in = Nieuwe RegExpregexOne.Pattern = "AC"regexOne.Global = TrueregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Stel theMatches = regexOne.Execute(stringOne) inVoor elke wedstrijd in de wedstrijdenDebug.Print Match.ValueVolgendeEinde sub

Het resultaat is:

Laten we zeggen dat we alleen -ADC- wilden matchen met de bovenstaande string. De volgende code laat zien hoe u alleen -ADC- uit de tekenreeks kunt matchen en weergeven:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern()Dim stringOne As StringDim regexOne als objectStel regexOne in = Nieuwe RegExpregexOne.Pattern = "\-\A.C\-"regexOne.Global = FalseregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Stel theMatches = regexOne.Execute(stringOne) inVoor elke wedstrijd in de wedstrijdenDebug.Print Match.ValueVolgendeEinde sub

Regex kan enige tijd duren om te leren, maar het is een uiterst krachtig hulpmiddel voor het identificeren/manipuleren van tekstreeksen. Het wordt ook veel gebruikt in programmeertalen.

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave