VBA regex

Kazalo

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.

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave