Ta vadnica bo pokazala, kako uporabljati Regex v VBA.
Kaj je Regex?
Regex pomeni regularni izraz. Regularni izraz je vzorec, sestavljen iz zaporedja znakov, ki ga lahko uporabite za iskanje ujemajočega se vzorca v drugem nizu. Če želite uporabljati Regex v VBA, morate uporabiti objekt RegExp.
Vzorec, kot je [A-C], lahko uporabite za iskanje in ujemanje velike črke od A do C v zaporedju. Vzorci regex imajo svojo sintakso in jih lahko sestavite z uporabo znaka ali zaporedja znakov.
Ujemanje likov
Naslednja tabela prikazuje sintakso, ki vam bo omogočila izdelavo vzorcev regularnih izrazov.
Sintaksa vzorca | Opis | Primer | Najdena ujemanja |
---|---|---|---|
. | Ujema se z enim samim znakom, razen vbNewLine | f.n | fan, fon, f@n, fwn |
[znakov] | Ujema kateri koli znak med oklepaji [] | [fn] | Bi se ujemal samo z "f" ali "n" v ventilatorju |
[^znakov] | Ujema se z enim samim znakom, ki ni med oklepaji [] | [^fn] | Tako bi se ujemalo z "j" v "fjn" |
[začetek-konec] | Ujema kateri koli znak, ki je del obsega v oklepajih [] | [1-5] | Bi se ujemalo z "4" in "5" v "45" |
\ w | Ujema alfanumerične znake in podčrtaj, ne pa tudi presledka | \ w | Ujema se z "c" v ", c." |
\ W | Ujema se z vsemi nealfanumeričnimi znaki in podčrtajem | \ W | Se ujema z "@" v "bb@bb" |
\ s | Ujema se s katerim koli presledkom, kot so presledki in zavihki | \ s | Bi se ujemalo "" v "To je" |
\ S | Ujema se s katerim koli praznim znakom | \ S | Bi se ujemal s "T" in "h" v "T h" |
\ d | Ujema se z eno samo decimalno številko | \ d | Se ujema z "7" v "a7h" |
\ D | Ujema se s katero koli eno decimalno številko | \ D | Se ujema z j v "47j" |
\ | Pobegne iz posebnih znakov, kar vam omogoča iskanje | \. | Ujema se z "." v “59.pQ” |
\ t | Zavihek | \ t | Ujema se z znakom zavihka |
\ r | Vračilo kočije | \ r | Se ujema z vrnitvijo vozička (vbCr) |
\ n | vbNewLine (vbTab) | \ n | Ujema se z novo vrstico |
Kvantifikatorji
S količniki lahko določite, kolikokrat želite, da se vzorec ujema z nizom.
Kvantifikator | Opis | Primer | Najdena ujemanja |
---|---|---|---|
* | Ujema z nič ali več dogodki | fn*a | fna, fa, fnna, fnnna, fnfnnna |
+ | Ujema enega ali več pojavitev | fn+a | fna, fnna, fnfnna |
? | Ujema se z ničlo ali eno | fn? a | fa, fna |
{n} | Večkrat se ujema z „n“ | d \ W {4} | Ujema se z "d …" v “d…. & 5hi” |
{n,} | Največkrat se ujema z "n" | d \ W {4,} | Bi se ujemal z „d…. &“ V „d…. & 5hi“ |
{n, m} | Število ujemanja med n in m | d \ W {1,8} | Bi se ujemal z „d…. &&&&“ v „d…. &&&& 5hi“ |
Združevanje
Združevanje ali zajemanje vam omogoča, da z vzorcem zajamete in izvlečete del niza. Tako se vzorec ne samo ujema, ampak se zajame tudi del niza, ki ustreza vzorcu.
Vzorec | Opis | Primer | Najdene in ujete tekme |
---|---|---|---|
(izraz) | Združi in zajame vzorec v oklepaju | (\ W {4}) | Bi združil in zajel »@@@@« iz »1 @@@@ 1jlmba« |
Kako uporabljati Regex v VBA
Če želite uporabljati Regex v VBA, morate najprej nastaviti referenco v urejevalniku VBE. V urejevalniku VBE pojdite na Orodja> Reference> Regulativni izrazi Microsoft VBScript.
To so lastnosti predmeta RegExp:
- Vzorec - Vzorec, ki ga boste uporabili za ujemanje z nizom.
- IgnoreCase - Če je True, potem ujemanje ne upošteva velikih črk.
- Globalno - Če je True, so najdena vsa ujemanja vzorca v nizu. Če je False, je najdeno samo prvo ujemanje.
- MultiLine - Če je True, se ujemanje vzorcev zgodi med prelomi vrstic.
To so metode predmeta RegExp:
- Test - Išče vzorec v nizu in vrne vrednost True, če se najde ujemanje.
- Zamenjati - Zamenja pojavljanje vzorca z nadomestnim nizom.
- Izvedite - Vrne ujemanja vzorca proti nizu.
Testiranje vzorca za ujemanje proti nizu
Z metodo Test lahko preverite, ali se vzorec ujema z zaporedjem v vhodnem nizu. Če je najdeno ujemanje, je rezultat resničen. Naslednja koda vam bo pokazala, kako preizkusite vzorec v nizu:
12345678910111213 | Sub RegexTestingAPattern ()Zatemni niz Ena kot nizZatemni regexOne As ObjectNastavi regexOne = Nov RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)End Sub |
Rezultat je:
Zamenjava vzorca v nizu
Z metodo Replace lahko zamenjate prvi primerek ujemajočega se vzorca v nizu ali vse primerke ujemajočega se vzorca v nizu. Če je Global nastavljeno na False, se zamenja samo prvi primerek. Naslednja koda vam bo pokazala, kako zamenjati vzorec v nizu:
1234567891011 | Sub RegexReplacingAPattern ()Zatemni niz Ena kot nizZatemni regexOne As ObjectNastavi regexOne = Nov RegExpregexOne.Pattern = "To je številka"regexOne.Global = NeresničnostringOne = "To je številka 718901"Debug.Print regexOne.Replace (stringOne, "To je nova številka")End Sub |
Rezultat je:
Če želite zamenjati samo številčni del zgoraj uporabljenega niza, uporabite naslednjo kodo:
1234567891011 | Sub RegexReplacingAPattern ()Zatemni niz Ena kot nizZatemni regexOne As ObjectNastavi regexOne = Nov RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = NeresničnostringOne = "To je številka 718901"Debug.Print regexOne.Replace (stringOne, "777192")End Sub |
Rezultat je:
Če želite zamenjati vsak primerek določenega vzorca v nizu, bi globalno vrednost nastavili na True. Naslednja koda prikazuje, kako zamenjati vsak primerek -A1289C- v nizu:
1234567891011 | Sub RegexReplacingEveryInstanceOfAPattern ()Zatemni niz Ena kot nizZatemni regexOne As ObjectNastavi regexOne = Nov RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = ResstringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")End Sub |
Ujemanje in prikaz vzorca v nizu
Z metodo Execute lahko ujemate enega ali vse primerke vzorca v nizu. Naslednja koda prikazuje, kako ujemati in prikazati vse primerke vzorca iz niza:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Zatemni niz Ena kot nizZatemni regexOne As ObjectNastavi regexOne = Nov RegExpregexOne.Pattern = "A.C"regexOne.Global = ResregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Nastavite theMatches = regexOne.Execute (stringOne)Za vsako tekmo v tekmahDebug.Print Match.ValueNaslednjiEnd Sub |
Rezultat je:
Recimo, da smo se želeli ujemati samo -ADC- iz zgornjega niza. Naslednja koda prikazuje, kako ujemati in prikazati samo -ADC- iz niza:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Zatemni niz Ena kot nizZatemni regexOne As ObjectNastavi regexOne = Nov RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = NeresničnoregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Nastavite theMatches = regexOne.Execute (stringOne)Za vsako tekmo v tekmahDebug.Print Match.ValueNaslednjiEnd Sub |
Regex lahko traja nekaj časa, da se ga nauči, vendar je izjemno zmogljivo orodje za prepoznavanje/upravljanje nizov besedila. Prav tako se pogosto uporablja v programskih jezikih.