VBA Regex

Indholdsfortegnelse

Denne vejledning viser, hvordan du bruger Regex i VBA.

Hvad er Regex?

Regex står for regulært udtryk. Et regulært udtryk er et mønster, der består af en sekvens af tegn, som du kan bruge til at finde et matchende mønster i en anden streng. For at bruge Regex i VBA skal du bruge RegExp -objektet.

Et mønster som [AC] kan bruges til at søge efter og matche et stort bogstav fra A til C fra en sekvens. Regex -mønstre har deres egen syntaks og kan bygges ved hjælp af et tegn eller en sekvens af tegn.

Matchende tegn

Følgende tabel viser syntaksen, som giver dig mulighed for at opbygge Regex -mønstre.

Mønster syntaks Beskrivelse Eksempel Matcher fundet
. Matcher ethvert enkelt tegn undtagen vbNewLine f.n fan, fon, f@n, fwn
[tegn] Matcher ethvert enkelt tegn mellem parenteser [] [fn] Kunne matche “f” eller “n” i ventilator
[^tegn] Matcher ethvert enkelt tegn, der ikke er mellem parenteser [] [^fn] Så ville matche “j” i “fjn”
[start-slut] Matcher ethvert tegn, der er en del af intervallet i parentes [] [1-5] Ville matche “4” og “5” i “45”
\ w Matcher alfanumeriske tegn og understregningen, men ikke mellemrumstegnet \ w Ville matche "c" i ", c."
\ W Matcher alle ikke-alfanumeriske tegn og understregningen \ W Ville matche “@” i “bb@bb”
\ s Matcher ethvert hvidt mellemrum, f.eks. Mellemrum og faner \ s Ville matche ”” i ”Dette er”
\ S Matcher enhver ikke-hvid mellemrumstegn \ S Ville matche "T" og "h" i "T h"
\ d Matcher ethvert enkelt decimaltal \ d Ville matche "7" i "a7h"
\ D Matcher ethvert enkelt ikke-decimalt ciffer \ D Ville matche j i “47j”
\ Undslipper specialtegn, som derefter giver dig mulighed for at søge efter dem \. Ville matche "." i “59.pQ”
\ t Tab \ t Ville matche et faneblade
\ r Vognretur \ r Ville matche en vognretur (vbCr)
\ n vbNewLine (vbTab) \ n Ville matche en ny linje

Kvantificatorer

Du kan bruge kvantificatorer til at angive, hvor mange gange du vil have mønsteret til at matche mod strengen.

Kvantificering Beskrivelse Eksempel Matcher fundet
* Matcher nul eller flere forekomster fn*a fna, fa, fnna, fnnna, fnfnnna
+ Matcher en eller flere forekomster fn+a fna, fnna, fnfnna
? Matcher nul eller en fn? a fa, fna
{n} Matcher “n” mange gange d \ W {4} Ville matche “d….” i “d…. & 5hi”
{n,} Matcher mindst "n" antal gange d \ W {4,} Ville matche “d…. &” I “d…. & 5hi”
{n, m} Matcher mellem n og m antal gange d \ W {1,8} Ville matche “d…. &&&&” i “d…. &&&& 5hi”

Gruppering

Gruppering eller indfangning giver dig mulighed for at bruge et mønster til at indfange og udtrække en del af en streng. Så ikke kun matches mønsteret, men den del af strengen, der matcher mønsteret, fanges.

Mønster Beskrivelse Eksempel Tændstikker fundet og fanget
(udtryk) Grupper og fanger mønsteret i parentes (\ W {4}) Ville gruppere og fange “@@@@” fra “1 @@@@ 1jlmba”

Sådan bruges Regex i VBA

For at bruge Regex i VBA skal du først angive referencen i VBE -editoren. Gå til VBE -editoren Værktøjer> Referencer> Microsoft VBScript Regular Expressions.

Disse er egenskaberne for RegExp -objektet:

  • Mønster - Det mønster, du skal bruge til at matche mod strengen.
  • Ignorer sag - Hvis det er sandt, ignorerer matchningen bogstaver.
  • Global - Hvis det er sandt, findes alle matchene i mønsteret i strengen. Hvis Falsk, findes kun den første kamp.
  • MultiLine - Hvis det er sandt, sker mønstermatchning på tværs af linjeskift.

Disse er metoderne for RegExp -objektet:

  • Prøve - Søger efter et mønster i en streng og returnerer True, hvis der findes et match.
  • Erstatte - Erstatter forekomsten af ​​mønsteret med erstatningsstrengen.
  • Udfør - Returnerer mønsterets kampe mod strengen.

Test af et mønster for en kamp mod en streng

Du kan bruge testmetoden til at kontrollere, om et mønster matcher en sekvens i inputstrengen. Resultatet er sandt, hvis der findes et match. Følgende kode viser dig, hvordan du tester et mønster mod en streng:

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

Resultatet er:

Udskiftning af et mønster i en streng

Du kan bruge metoden Erstat til at erstatte den første forekomst af et matchende mønster i en streng eller alle forekomster af et matchende mønster i en streng. Hvis Global er indstillet til Falsk, erstattes kun den første forekomst. Følgende kode viser dig, hvordan du udskifter et mønster i en streng:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne som objektIndstil regexOne = Ny RegExpregexOne.Pattern = "Dette er tallet"regexOne.Global = FalskstringOne = "Dette er tallet 718901"Debug.Print regexOne.Replace (stringOne, "Det er det nye nummer")Afslut Sub

Resultatet er:

For kun at erstatte nummerdelen af ​​strengen, der bruges ovenfor, ville du bruge følgende kode:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne som objektIndstil regexOne = Ny RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = FalskstringOne = "Dette er tallet 718901"Debug.Print regexOne.Replace (stringOne, "777192")Afslut Sub

Resultatet er:

Hvis du vil erstatte hver forekomst af et bestemt mønster i en streng, skal du angive den globale værdi til Sand. Følgende kode viser dig, hvordan du udskifter hver forekomst af -A1289C- i strengen:

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

Matchning og visning af et mønster i en streng

Du kan bruge Execute -metoden til at matche en eller alle forekomster af et mønster i en streng. Følgende kode viser dig, hvordan du matcher og viser alle forekomster af mønsteret fra strengen:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne som objektIndstil regexOne = Ny RegExpregexOne.Pattern = "A.C"regexOne.Global = SandtregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Indstil theMatches = regexOne.Execute (stringOne)For hver kamp i kampeneDebug.Print Match.ValueNæsteAfslut Sub

Resultatet er:

Lad os sige, at vi kun ville matche -ADC- fra ovenstående streng. Følgende kode viser, hvordan man kun matcher og viser -ADC- fra strengen:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne som objektIndstil regexOne = Ny RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = FalskregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Indstil theMatches = regexOne.Execute (stringOne)For hver kamp i kampeneDebug.Print Match.ValueNæsteAfslut Sub

Regex kan tage lidt tid at lære, men det er et ekstremt kraftfuldt værktøj til at identificere/manipulere tekststrenge. Det bruges også bredt på tværs af programmeringssprog.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave