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.