VBA Regex

Innehållsförteckning

Denna handledning visar hur du använder Regex i VBA.

Vad är Regex?

Regex står för reguljärt uttryck. Ett reguljärt uttryck är ett mönster som består av en sekvens av tecken som du kan använda för att hitta ett matchande mönster i en annan sträng. För att kunna använda Regex i VBA måste du använda RegExp -objektet.

Ett mönster som [A-C] kan användas för att söka efter och matcha en stor bokstav från A till C från en sekvens. Regex -mönster har sin egen syntax och kan byggas med ett tecken eller en sekvens av tecken.

Matchande karaktärer

Följande tabell visar syntaxen som låter dig bygga Regex -mönster.

Mönster Syntax Beskrivning Exempel Matcher hittade
. Matchar alla tecken utom vbNewLine f.n fläkt, fon, f@n, fwn
[tecken] Matchar varje enskilt tecken mellan parenteser [] [fn] Skulle bara matcha "f" eller "n" i fläkten
[^tecken] Matchar alla tecken som inte finns mellan parenteser [] [^fn] Så skulle matcha "j" i "fjn"
[start-slutet] Matchar alla tecken som ingår i intervallet inom parentes [] [1-5] Skulle matcha "4" och "5" i "45"
\ w Matchar alfanumeriska tecken och understrecket, men inte mellanslagstecknet \ w Skulle matcha "c" i ", c."
\ W Matchar alla icke-alfanumeriska tecken och understrecket \ W Skulle matcha "@" i "bb@bb"
\ s Matchar alla vita blanksteg, t.ex. mellanslag och flikar \ s Skulle matcha ”” i ”Detta är”
\ S Matchar alla icke-vita mellanslagstecken \ S Skulle matcha "T" och "h" i "T h"
\ d Matchar alla decimaler \ d Skulle matcha "7" i "a7h"
\ D Matchar alla enskilda icke-decimala siffror \ D Skulle matcha j i “47j”
\ Slipper specialtecken som sedan låter dig söka efter dem \. Skulle matcha "." i "59.pQ"
\ t Flik \ t Skulle matcha ett tabbtecken
\ r Vagnretur \ r Skulle matcha en vagnretur (vbCr)
\ n vbNewLine (vbTab) \ n Skulle matcha en ny rad

Kvantifierare

Du kan använda kvantifierare för att ange hur många gånger du vill att mönstret ska matcha mot strängen.

Kvantifierare Beskrivning Exempel Matcher hittade
* Matchar noll eller fler förekomster fn*a fna, fa, fnna, fnnna, fnfnnna
+ Matchar en eller flera förekomster fn+a fna, fnna, fnfnna
? Matchar noll eller en fn? a fa, fna
{n} Matchar ”n” många gånger d \ W {4} Skulle matcha "d …" i “d…. & 5hi”
{n,} Matchar minst "n" antal gånger d \ W {4,} Skulle matcha “d…. &” I “d…. & 5hi”
{n, m} Matchar mellan n och m antal gånger d \ W {1,8} Skulle matcha “d…. &&&&” i “d…. &&&& 5hi”

Gruppering

Genom att gruppera eller fånga kan du använda ett mönster för att fånga och extrahera en del av en sträng. Så mönstret matchas inte bara, utan den del av strängen som matchar mönstret fångas upp.

Mönster Beskrivning Exempel Matcher hittade och fångade
(uttryck) Grupperar och fångar mönstret inom parentes (\ W {4}) Skulle gruppera och fånga "@@@@" från "1 @@@@ 1jlmba"

Hur man använder Regex i VBA

För att kunna använda Regex i VBA måste du först ställa in referensen i VBE -redigeraren. Gå till VBE -redigeraren Verktyg> Referenser> Microsoft VBScript Regular Expressions.

Dessa är egenskaperna för RegExp -objektet:

  • Mönster - Mönstret du ska använda för att matcha mot strängen.
  • Ignorera fall - Om det är sant, ignorerar matchningen bokstäver.
  • Global - Om det är sant, så hittas alla matchningar för mönstret i strängen. Om False hittas bara den första matchningen.
  • MultiLine - Om det är sant sker mönstermatchning över radbrytningar.

Detta är metoderna för RegExp -objektet:

  • Testa - Söker efter ett mönster i en sträng och returnerar True om en matchning hittas.
  • Byta ut - Ersätter förekomsten av mönstret med ersättningssträngen.
  • Kör - Returnerar matchningar av mönstret mot strängen.

Testa ett mönster för en match mot en sträng

Du kan använda testmetoden för att kontrollera om ett mönster matchar en sekvens i inmatningssträngen. Resultatet är sant om en matchning hittas. Följande kod visar hur du testar ett mönster mot en sträng:

12345678910111213 Sub RegexTestingAPattern ()Dim stringOne As StringDim regexOne som objektAnge regexOne = Ny RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)Avsluta Sub

Resultatet är:

Byta ut ett mönster i en sträng

Du kan använda ersättningsmetoden för att ersätta den första förekomsten av ett matchande mönster i en sträng eller alla förekomster av ett matchande mönster i en sträng. Om Global är inställt på False ersätts endast den första instansen. Följande kod visar hur du byter ut ett mönster i en sträng:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne som objektAnge regexOne = Ny RegExpregexOne.Pattern = "Detta är talet"regexOne.Global = FalsktstringOne = "Detta är talet 718901"Debug.Print regexOne.Replace (stringOne, "Det är det nya numret")Avsluta Sub

Resultatet är:

För att bara ersätta nummerdelen av strängen som används ovan använder du följande kod:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne som objektAnge regexOne = Ny RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = FalsktstringOne = "Detta är talet 718901"Debug.Print regexOne.Replace (stringOne, "777192")Avsluta Sub

Resultatet är:

För att ersätta varje förekomst av ett visst mönster i en sträng, skulle du ställa in det globala värdet till True. Följande kod visar hur du ersätter varje instans av -A1289C- i strängen:

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringDim regexOne som objektAnge regexOne = Ny RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = SantstringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")Avsluta Sub

Matcha och visa ett mönster i en sträng

Du kan använda metoden Execute för att matcha en eller alla förekomster av ett mönster i en sträng. Följande kod visar hur du matchar och visar alla förekomster av mönstret från strängen:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne som objektAnge regexOne = Ny RegExpregexOne.Pattern = "A.C"regexOne.Global = SantregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Ange theMatches = regexOne.Execute (stringOne)För varje match i matchernaDebug.Print Match.ValueNästaAvsluta Sub

Resultatet är:

Låt oss säga att vi bara ville matcha -ADC- från ovanstående sträng. Följande kod visar hur man matchar och visar endast -ADC- från strängen:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne som objektAnge regexOne = Ny RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = FalsktregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Ange theMatches = regexOne.Execute (stringOne)För varje match i matchernaDebug.Print Match.ValueNästaAvsluta Sub

Regex kan ta lite tid att lära sig, men det är ett extremt kraftfullt verktyg för att identifiera/manipulera textsträngar. Det används också i stort över programmeringsspråk.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave