Ši pamoka parodys, kaip naudoti „Regex“ VBA.
Kas yra „Regex“?
Regex reiškia reguliarią išraišką. Įprasta išraiška yra modelis, sudarytas iš simbolių sekos, kurią galite naudoti norėdami rasti atitinkamą modelį kitoje eilutėje. Norėdami naudoti „Regex“ VBA, turite naudoti „RegExp“ objektą.
Tokį modelį kaip [A-C] galima naudoti norint surasti ir suderinti didžiąsias raides nuo A iki C iš sekos. Reguliariosios raidės modeliai turi savo sintaksę ir gali būti sukurti naudojant simbolį ar simbolių seką.
Atitinkantys personažai
Šioje lentelėje parodyta sintaksė, kuri leis jums sukurti reguliariųjų reiškinių modelius.
Šablono sintaksė | apibūdinimas | Pavyzdys | Rastos rungtynės |
---|---|---|---|
. | Atitinka bet kurį atskirą simbolį, išskyrus „vbNewLine“ | f.n | ventiliatorius, fon, f@n, fwn |
[personažai] | Atitinka bet kurį simbolį tarp skliaustų [] | [fn] | Ventiliatoriuje tiktų „f“ arba „n“ |
[^simbolių] | Atitinka bet kurį simbolį, kuris nėra tarp skliaustų [] | [^fn] | Taigi „fjn“ atitiktų „j“ |
[pradžia-pabaiga] | Atitinka bet kokį simbolį, kuris yra skliausteliuose esančio diapazono dalis [] | [1-5] | „45“ atitiktų „4“ ir „5“ |
\ w | Atitinka raidinius ir skaitmeninius simbolius bei pabraukimą, bet ne tarpą | \ w | „C“ atitiktų „c“. |
\ W | Atitinka visus ne raidinius ir skaitmeninius simbolius ir pabraukimą | \ W | „Bb@bb“ atitiktų „@“ |
\ s | Atitinka bet kokį tuščią tarpą, pvz., Tarpus ir skirtukus | \ s | Tiktų ““ skiltyje „Tai yra“ |
\ S | Atitinka bet kurį ne baltos spalvos simbolį | \ S | „T h“ atitiktų „T“ ir „h“ |
\ d | Atitinka bet kurį skaičių po kablelio | \ d | „A7h“ atitiktų „7“ |
\ D | Atitinka bet kurį ne dešimtainį skaitmenį | \ D | Tiktų j „47j“ |
\ | Išvengia specialių simbolių, kurie leidžia jums jų ieškoti | \. | Tiktų „“. „59.pQ“ |
\ t | Skirtukas | \ t | Tiktų skirtuko simbolis |
\ r | Vežimo grąžinimas | \ r | Tiks vežimo grąžinimas (vbCr) |
\ n | vbNewLine (vbTab) | \ n | Tiktų naujai eilutei |
Kvantoriai
Galite naudoti kiekybinius parametrus, norėdami nurodyti, kiek kartų norite, kad modelis atitiktų eilutę.
Kvantorius | apibūdinimas | Pavyzdys | Rastos rungtynės |
---|---|---|---|
* | Atitinka nulį ar daugiau įvykių | fn*a | fna, fa, fnna, fnnna, fnfnnna |
+ | Atitinka vieną ar daugiau įvykių | fn+a | fna, fnna, fnfnna |
? | Atitinka nulį arba vieną | fn? a | fa, fna |
{n} | Daug kartų atitinka „n“ | d \ W {4} | Tiktų „d…“. „d…. ir 5hi“ |
{n,} | Atitinka bent „n“ kartų skaičių | d \ W {4,} | Tiktų „d…. &“ Iš „d…. & 5hi“ |
{n, m} | Atitinka n ir m kartų skaičių | d \ W {1,8} | Atitiktų „d…. &&&&“ „d…. &&&& 5hi“ |
Grupavimas
Grupavimas arba fiksavimas leidžia naudoti modelį, kad užfiksuotumėte ir ištrauktumėte eilutės dalį. Taigi ne tik modelis suderinamas, bet ir užfiksuojama tą eilutę atitinkanti eilutės dalis.
Raštas | apibūdinimas | Pavyzdys | Rastos ir užfiksuotos rungtynės |
---|---|---|---|
(išraiška) | Grupuoja ir fiksuoja modelį skliausteliuose | (\ W {4}) | Sugrupuotų ir užfiksuotų „@@@@“ iš „1 @@@@ 1jlmba“ |
Kaip naudoti „Regex“ VBA
Norėdami naudoti „Regex“ VBA, pirmiausia turite nustatyti nuorodą VBE redaktoriuje. VBE redaktoriuje eikite į Įrankiai> Nuorodos> „Microsoft VBScript“ reguliariosios išraiškos.
Tai yra „RegExp“ objekto savybės:
- Raštas - Šablonas, kurį naudosite derindami prie eilutės.
- Ignoruoti atvejį - Jei tiesa, tada atitikimas nepaiso raidžių raidžių.
- Pasaulinis - Jei tiesa, tada randamos visos eilutės modelio atitiktys. Jei klaidinga, randama tik pirmoji atitiktis.
- „MultiLine“ - Jei tiesa, šablonų atitikimas įvyksta tarp eilučių pertraukų.
Tai yra „RegExp“ objekto metodai:
- Bandymas - Ieškoma eilutės šablono ir grąžina „True“, jei randama atitiktis.
- Pakeisti - Pakeičia modelio atsiradimą pakeičiamąja eilute.
- Vykdyti - Grąžina modelio atitikmenis prieš eilutę.
Šablono atitikimo prieš eilutę testavimas
Galite naudoti bandymo metodą, kad patikrintumėte, ar modelis atitinka įvesties eilutės seką. Rezultatas yra teisingas, jei randama atitiktis. Šis kodas parodys, kaip išbandyti modelį pagal eilutę:
12345678910111213 | Subreguliarusis testavimasPattern ()Dim stringOne As StringDim regexOne kaip objektasNustatyti regexOne = New RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Derinti. Spausdinti regexOne.Test (stringOne)Pabaiga Sub |
Rezultatas yra toks:
Šablono pakeitimas eilutėje
Galite naudoti pakeitimo metodą, kad pakeistumėte pirmąjį atitikimo modelio egzempliorių eilutėje arba visus atitikimo modelio atvejus eilutėje. Jei „Global“ nustatyta kaip „False“, pakeičiamas tik pirmasis egzempliorius. Šis kodas parodys, kaip pakeisti modelį eilutėje:
1234567891011 | Subreguliarusis tekstasReplacingAPattern ()Dim stringOne As StringDim regexOne kaip objektasNustatyti regexOne = New RegExpregexOne.Pattern = "Tai skaičius"regexOne.Global = NetiesastringOne = "Tai skaičius 718901"Derinti. Spausdinti regexOne.Replace (stringOne, „Tai naujas numeris“)Pabaiga Sub |
Rezultatas yra toks:
Norėdami pakeisti tik aukščiau naudotos eilutės skaičių, naudokite šį kodą:
1234567891011 | Subreguliarusis tekstasReplacingAPattern ()Dim stringOne As StringDim regexOne kaip objektasNustatyti regexOne = New RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = NetiesastringOne = "Tai skaičius 718901"Debug.Print regexOne.Replace (stringOne, "777192")Pabaiga Sub |
Rezultatas yra toks:
Jei norite pakeisti kiekvieną eilutės tam tikro šablono egzempliorių, nustatykite visuotinę vertę „True“. Šis kodas parodo, kaip pakeisti kiekvieną eilutės -A1289C- egzempliorių:
1234567891011 | Subreguliarioji reikšmėReplacingEveryInstanceOfAPattern ()Dim stringOne As StringDim regexOne kaip objektasNustatyti regexOne = New RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = TiesastringOne = "ABC-A1289C-ABC-A1289C-ABC"Derinti. Spausdinti regexOne.Replace (stringOne, „IJK“)Pabaiga Sub |
Šablono atitikimas ir rodymas eilutėje
Galite naudoti vykdymo metodą, kad atitiktų vieną ar visus modelio egzempliorius eilutėje. Šis kodas parodo, kaip suderinti ir rodyti visus eilutės šablono egzempliorius:
123456789101112131415161718 | Subreguliarusis atitikmuoMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne kaip objektasNustatyti regexOne = New RegExpregexOne.Pattern = "A.C"regexOne.Global = TiesaregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Nustatykite theMatches = regexOne.Execute (stringOne)Kiekvienoms rungtynėms rungtynėseDerinti. Spausdinti atitiktį. VertėKitasPabaiga Sub |
Rezultatas yra toks:
Tarkime, kad norėjome tik suderinti -ADC- iš aukščiau pateiktos eilutės. Šis kodas parodo, kaip suderinti ir rodyti tik -ADC- iš eilutės:
123456789101112131415161718 | Subreguliarusis atitikmuoMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne kaip objektasNustatyti regexOne = New RegExpregexOne.Pattern = "\-\ A.C \" "regexOne.Global = NetiesaregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Nustatykite theMatches = regexOne.Execute (stringOne)Kiekvienoms rungtynėms rungtynėseDerinti. Spausdinti atitiktį. VertėKitasPabaiga Sub |
„Regex“ išmokti gali prireikti šiek tiek laiko, tačiau tai yra labai galingas įrankis identifikuoti/manipuliuoti teksto eilutėmis. Jis taip pat plačiai naudojamas programavimo kalbose.