VBA Regex

Innholdsfortegnelse

Denne opplæringen vil demonstrere hvordan du bruker Regex i VBA.

Hva er Regex?

Regex står for regulært uttrykk. Et vanlig uttrykk er et mønster som består av en sekvens av tegn som du kan bruke til å finne et matchende mønster i en annen streng. For å bruke Regex i VBA må du bruke RegExp -objektet.

Et mønster som [AC] kan brukes til å søke etter og matche en stor bokstav fra A til C fra en sekvens. Regex -mønstre har sin egen syntaks og kan bygges ved hjelp av et tegn eller en sekvens av tegn.

Matchende tegn

Tabellen nedenfor viser syntaksen som lar deg bygge Regex -mønstre.

Mønster syntaks Beskrivelse Eksempel Treff funnet
. Matcher ethvert enkelt tegn unntatt vbNewLine f.n fan, fon, f@n, fwn
[tegn] Matcher et enkelt tegn mellom parenteser [] [fn] Ville bare matche “f” eller “n” i vifte
[^tegn] Matcher et enkelt tegn som ikke er mellom parenteser [] [^fn] Så ville matche “j” i “fjn”
[start-slutt] Matcher alle tegn som er en del av området mellom parenteser [] [1-5] Ville matche “4” og “5” i “45”
\ w Matcher alfanumeriske tegn og understrek, men ikke mellomromstegnet \ w Ville matche "c" i ", c."
\ W Matcher alle ikke-alfanumeriske tegn og understrek \ W Ville matche “@” i “bb@bb”
\ s Matcher alle hvite mellomromstegn, for eksempel mellomrom og faner \ s Ville matche ”” i ”This is”
\ S Matcher alle ikke-hvite mellomromstegn \ S Ville matche "T" og "h" i "T h"
\ d Matcher ethvert enkelt desimal siffer \ d Ville matche "7" i "a7h"
\ D Samsvarer med et enkelt ikke-desimal siffer \ D Ville matche j i “47j”
\ Unnslipper spesialtegn som deretter lar deg søke etter dem \. Vil matche "." i “59.pQ”
\ t Tab \ t Ville matche et fanetegn
\ r Vognretur \ r Ville matche en vognretur (vbCr)
\ n vbNewLine (vbTab) \ n Ville matche en ny linje

Kvantifiseringer

Du kan bruke kvantifiseringer til å angi hvor mange ganger du vil at mønsteret skal matche mot strengen.

Kvantifisering Beskrivelse Eksempel Treff funnet
* Matcher null eller flere forekomster fn*a fna, fa, fnna, fnnna, fnfnnna
+ Matcher en eller flere forekomster fn+a fna, fnna, fnfnna
? Matcher null eller en fn? a fa, fna
{n} Matcher "n" mange ganger d \ W {4} Ville matche “d….” i “d…. & 5hi”
{n,} Matcher minst "n" antall ganger d \ W {4,} Ville matche “d…. &” I “d…. & 5hi”
{n, m} Matcher mellom n og m antall ganger d \ W {1,8} Ville matche “d…. &&&&” i “d…. &&&& 5hi”

Gruppering

Gruppering eller fangst lar deg bruke et mønster for å fange og trekke ut en del av en streng. Så ikke bare er mønsteret matchet, men den delen av strengen som matcher mønsteret blir fanget opp.

Mønster Beskrivelse Eksempel Treff funnet og fanget
(uttrykk) Grupper og fanger opp mønsteret i parentes (\ W {4}) Ville gruppere og fange “@@@@” fra “1 @@@@ 1jlmba”

Hvordan bruke Regex i VBA

For å bruke Regex i VBA må du først angi referansen i VBE -editoren. Gå til VBE -redaktøren Verktøy> Referanser> Microsoft VBScript Regular Expressions.

Dette er egenskapene til RegExp -objektet:

  • Mønster - Mønsteret du skal bruke for å matche mot strengen.
  • IgnorerCase - Hvis det er sant, ignorerer matchningen bokstaver.
  • Global - Hvis det er sant, er alle treffene til mønsteret i strengen funnet. Hvis False, er det bare den første kampen som blir funnet.
  • MultiLine - Hvis det er sant, skjer mønstermatching på tvers av linjeskift.

Dette er metodene for RegExp -objektet:

  • Test - Søker etter et mønster i en streng og returnerer True hvis en treff blir funnet.
  • Erstatte - Erstatter forekomster av mønsteret med erstatningsstrengen.
  • Henrette - Returnerer treff av mønsteret mot strengen.

Testing av et mønster for en kamp mot en streng

Du kan bruke testmetoden til å kontrollere om et mønster samsvarer med en sekvens i inndatastrengen. Resultatet er sant hvis det blir funnet en treff. Følgende kode viser deg hvordan du tester et mønster mot en streng:

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

Resultatet er:

Bytte ut et mønster i en streng

Du kan bruke Erstatt -metoden for å erstatte den første forekomsten av et matchende mønster i en streng eller alle forekomster av et matchende mønster i en streng. Hvis Global er satt til False, blir bare den første forekomsten erstattet. Følgende kode viser deg hvordan du erstatter et mønster i en streng:

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

Resultatet er:

Hvis du bare vil erstatte talldelen av strengen som brukes ovenfor, bruker du følgende kode:

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

Resultatet er:

Hvis du vil erstatte hver forekomst av et bestemt mønster i en streng, setter du den globale verdien til True. Følgende kode viser deg hvordan du erstatter hver forekomst av -A1289C- i strengen:

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

Matching og visning av et mønster i en streng

Du kan bruke Execute -metoden til å matche en eller alle forekomster av et mønster i en streng. Følgende kode viser deg hvordan du matcher og viser alle forekomster av mønsteret fra strengen:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectSett regexOne = Ny RegExpregexOne.Pattern = "A.C"regexOne.Global = TrueregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Angi theMatches = regexOne.Execute (stringOne)For hver kamp i kampeneDebug.Print Match.ValueNesteSlutt Sub

Resultatet er:

La oss si at vi bare ønsket å matche -ADC- fra strengen ovenfor. Følgende kode viser hvordan du matcher og viser bare -ADC- fra strengen:

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

Regex kan ta litt tid å lære, men det er et ekstremt kraftig verktøy for å identifisere/manipulere tekststrenger. Det er også mye brukt på tvers av programmeringsspråk.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave