Ovaj će vodič pokazati kako koristiti Regex u VBA -i.
Što je Regex?
Regex znači regularni izraz. Regularni izraz je uzorak sastavljen od niza znakova koje možete koristiti za pronalaženje odgovarajućeg uzorka u drugom nizu. Da biste koristili Regex u VBA, morate koristiti objekt RegExp.
Uzorak poput [A-C] može se koristiti za traženje i podudaranje velikih slova od A do C u nizu. Regex uzorci imaju svoju sintaksu i mogu se izgraditi pomoću znaka ili niza znakova.
Podudaranje likova
Sljedeća tablica prikazuje sintaksu koja će vam omogućiti izradu Regex uzoraka.
Sintaksa uzorka | Opis | Primjer | Pronađena podudaranja |
---|---|---|---|
. | Odgovara bilo kojem pojedinačnom znaku osim vbNewLine | f.n | fan, fon, f@n, fwn |
[likovi] | Podudara se s bilo kojim znakom između zagrada [] | [fn] | Odgovaralo bi samo "f" ili "n" u ventilatoru |
[^likova] | Odgovara svakom pojedinačnom znaku koji nije između zagrada [] | [^fn] | Tako bi odgovaralo "j" u "fjn" |
[početak-kraj] | Odgovara svakom znaku koji je dio raspona u zagradama [] | [1-5] | Odgovaralo bi "4" i "5" u "45" |
\ w | Odgovara alfanumeričkim znakovima i donjoj crti, ali ne i razmaku | \ w | Odgovaralo bi "c" u ", c". |
\ W | Odgovara svim alfanumeričkim znakovima i donjoj crti | \ W | Odgovaralo bi "@" u "bb@bb" |
\ s | Odgovara bilo kojem znaku razmaka poput razmaka i tabulatora | \ s | Odgovaralo bi "" u "Ovo je" |
\ S | Odgovara bilo kojem znaku razmaka koji nije bijeli | \ S | Odgovaralo bi "T" i "h" u "T h" |
\ d | Odgovara bilo kojoj pojedinačnoj decimalnoj znamenki | \ d | Odgovara "7" u "a7h" |
\ D | Odgovara bilo kojoj pojedinačnoj znamenci koja nije decimalna | \ D | Odgovaralo bi j u "47j" |
\ | Bježi od posebnih znakova što vam omogućuje da ih tražite | \. | Odgovaralo bi "." u "59.pQ" |
\ t | Tab | \ t | Odgovarao bi znaku kartice |
\ r | Povrat prtljage | \ r | Odgovara vraćanju nosača (vbCr) |
\ n | vbNewLine (vbTab) | \ n | Odgovarao bi novoj liniji |
Kvantifikatori
Pomoću kvantifikatora možete odrediti koliko puta želite da se uzorak podudara s nizom.
Kvantifikator | Opis | Primjer | Pronađena podudaranja |
---|---|---|---|
* | Podudara se s nulom ili više pojavljivanja | fn*a | fna, fa, fnna, fnnna, fnfnnna |
+ | Podudara se s jednim ili više pojavljivanja | fn+a | fna, fnna, fnfnna |
? | Podudara se s nulom ili jedinicom | fn? a | fa, fna |
{n} | Podudara se s „n“ više puta | d \ W {4} | Odgovaralo bi "d …". u "d …. & 5hi" |
{n,} | Podudara se s najmanje "n" broj puta | d \ W {4,} | Odgovaralo bi "d…. &" U "d…. & 5hi" |
{n, m} | Podudara se između n i m broj puta | d \ W {1,8} | Odgovaralo bi "d…. &&&&" u "d…. &&&& 5hi" |
Grupiranje
Grupiranje ili hvatanje omogućuje vam korištenje uzorka za hvatanje i izdvajanje dijela niza. Dakle, ne samo da se uzorak podudara, već se bilježi i dio niza koji odgovara uzorku.
Uzorak | Opis | Primjer | Pronađena i zarobljena podudaranja |
---|---|---|---|
(izraz) | Grupira i snima uzorak u zagradama | (\ W {4}) | Bi li se grupiralo i snimilo “@@@@” s “1 @@@@ 1jlmba” |
Kako koristiti Regex u VBA
Da biste koristili Regex u VBA -i, prvo morate postaviti referencu u VBE uređivaču. U uređivaču VBE idite na Alati> Reference> Microsoft VBScript regularni izrazi.
Ovo su svojstva objekta RegExp:
- Uzorak - Uzorak koji ćete koristiti za usklađivanje s nizom.
- IgnoreCase - Ako je True, tada se podudaranjem zanemaruju velika i mala slova.
- Globalno - Ako je True, tada se pronalaze sva podudaranja uzorka u nizu. Ako je False, tada se nalazi samo prvo podudaranje.
- MultiLine - Ako je Tačno, podudaranje uzoraka događa se preko prijeloma retka.
Ovo su metode objekta RegExp:
- Test - Traži uzorak u nizu i vraća True ako se pronađe podudaranje.
- Zamijeniti - Zamjenjuje pojavljivanja uzorka zamjenskim nizom.
- Izvršiti - Vraća podudaranja uzorka u niz.
Testiranje uzorka za podudaranje s nizom
Metodom testiranja možete provjeriti odgovara li uzorak nizu u ulaznom nizu. Rezultat je Tačan ako se pronađe podudaranje. Sljedeći kôd pokazat će vam kako testirati uzorak u nizu:
12345678910111213 | Sub RegexTestingAPattern ()Dim stringOne As StringPriguši regexOne As ObjectPostavi regexOne = Novi RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)Kraj podm |
Rezultat je:
Zamjena uzorka u nizu
Pomoću metode Zamijeni možete zamijeniti prvu instancu odgovarajućeg uzorka u nizu ili sve instance odgovarajućeg uzorka u nizu. Ako je Globalno postavljeno na Netačno, zamjenjuje se samo prva instanca. Sljedeći kôd pokazat će vam kako zamijeniti uzorak u nizu:
1234567891011 | PodregexReplacingAPattern ()Dim stringOne As StringPriguši regexOne As ObjectPostavi regexOne = Novi RegExpregexOne.Pattern = "Ovo je broj"regexOne.Global = NetačnostringOne = "Ovo je broj 718901"Debug.Print regexOne.Replace (stringOne, "To je novi broj")Kraj podm |
Rezultat je:
Da biste zamijenili samo brojčani dio niza koji je gore korišten, upotrijebili biste sljedeći kôd:
1234567891011 | PodregexReplacingAPattern ()Dim stringOne As StringPriguši regexOne As ObjectPostavi regexOne = Novi RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = NetačnostringOne = "Ovo je broj 718901"Debug.Print regexOne.Replace (stringOne, "777192")Kraj podm |
Rezultat je:
Da biste zamijenili svaku instancu određenog uzorka u nizu, postavili biste globalnu vrijednost na True. Sljedeći kôd pokazuje kako zamijeniti svaku instancu -A1289C- u nizu:
1234567891011 | PodregexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringZatamni regexOne As ObjectPostavi regexOne = Novi RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = IstinastringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")Kraj podm |
Usklađivanje i prikaz uzorka u nizu
Metodu Execute možete upotrijebiti za podudaranje jedne ili svih instanci uzorka unutar niza. Sljedeći kôd pokazuje vam kako uskladiti i prikazati sve instance uzorka iz niza:
123456789101112131415161718 | PodregexMatchingAndDisplayingAPattern ()Dim stringOne As StringZatamni regexOne As ObjectPostavi regexOne = Novi RegExpregexOne.Pattern = "A.C"regexOne.Global = IstinaregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Postavite Matches = regexOne.Execute (stringOne)Za svaku utakmicu u utakmicamaOtklanjanje pogrešaka. Podudaranje ispisa.VrijednostSljedećiKraj podm |
Rezultat je:
Recimo da smo samo htjeli upariti -ADC- iz gornjeg niza. Sljedeći kôd pokazuje kako upariti i prikazati samo -ADC- iz niza:
123456789101112131415161718 | PodregexMatchingAndDisplayingAPattern ()Dim stringOne As StringPriguši regexOne As ObjectPostavi regexOne = Novi RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = NetačnoregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Postavite Matches = regexOne.Execute (stringOne)Za svaku utakmicu u utakmicamaOtklanjanje pogrešaka. Podudaranje ispisa.VrijednostSljedećiKraj podm |
Regexu može trebati neko vrijeme za učenje, ali to je izuzetno moćan alat za identificiranje/manipulaciju nizovima teksta. Također se široko koristi u programskim jezicima.