VBA Regex

Obsah

Tento tutoriál ukáže, ako používať Regex vo VBA.

Čo je to Regex?

Regex znamená regulárny výraz. Regulárny výraz je vzor vytvorený zo sekvencie znakov, ktoré môžete použiť na nájdenie zodpovedajúceho vzoru v inom reťazci. Aby ste mohli používať Regex vo VBA, musíte použiť objekt RegExp.

Na vyhľadanie a priradenie veľkých písmen od A do C zo sekvencie je možné použiť vzor, ​​ako je [A-C]. Regexové vzory majú svoju vlastnú syntax a dajú sa vytvoriť pomocou znaku alebo postupnosti znakov.

Zhodné postavy

Nasledujúca tabuľka ukazuje syntax, ktorá vám umožní vytvárať vzorce Regex.

Syntax vzoru Popis Príklad Nájdené zhody
. Zodpovedá ľubovoľnému jednotlivému znaku okrem vbNewLine f.n fanúšik, fon, f@n, fwn
[postavy] Zodpovedá každému znaku v zátvorkách [] [fn] Vo ventilátore by zodpovedal iba „f“ alebo „n“
[^znakov] Zodpovedá ľubovoľnému jednotlivému znaku, ktorý nie je v hranatých zátvorkách [] [^fn] Takže by sa zhodovalo s „j“ v „fjn“
[začiatok-koniec] Zodpovedá ľubovoľnému znaku, ktorý je súčasťou rozsahu v zátvorkách [] [1-5] Bude zodpovedať „4“ a „5“ v „45“
\ w Zhoduje sa s alfanumerickými znakmi a podčiarkovníkom, ale nie s medzerníkom \ w Zhoduje sa s „c“ v „, c.“
\ W Zodpovedá akýmkoľvek nealfanumerickým znakom a podčiarkovníku \ W Zhoduje sa s „@“ v „bb@bb“
\ s Zodpovedá ľubovoľnému znaku prázdneho miesta, ako sú medzery a karty \ s Zhoduje sa "" v "Toto je"
\ S Zodpovedá ľubovoľnému znaku, ktorý nie je prázdny \ S Zhoduje sa s „T“ a „h“ v „T h“
\ d Zodpovedá ľubovoľnému jednému desatinnému miestu \ d Bude zodpovedať „7“ v „a7h“
\ D Zodpovedá akejkoľvek jedinej desatinnej číslici \ D Zhoduje sa s j v „47j“
\ Unikne špeciálnym znakom, ktoré vám potom umožní ich vyhľadanie \. Zhoduje sa s „.“ v „59.pQ“
\ t Tab \ t Zodpovedá znaku tabulátora
\ r Návrat vozíka \ r Zhoduje sa s návratom vozíka (vbCr)
\ n vbNewLine (vbTab) \ n Zodpovedá novému riadku

Kvantifikátory

Pomocou kvantifikátorov môžete určiť, koľkokrát chcete, aby sa vzor zhodoval s reťazcom.

Kvantifikátor Popis Príklad Nájdené zhody
* Zhoduje sa s nulovým alebo viacerými výskytmi fn*a fna, fa, fnna, fnnna, fnfnnna
+ Zhoduje sa s jedným alebo viacerými výskytmi fn+a fna, fnna, fnfnna
? Zhoduje sa s nulou alebo s jednou fn? a fa, fna
{n} Mnohokrát sa zhoduje s „n“ d \ W {4} Zodpovedá „d …“ v „d … & 5hi“
{n,} Viackrát sa zhoduje s „n“ d \ W {4,} Zhoduje sa s „d…. &“ V „d…. & 5hi“
{n, m} Počet zhody medzi n a m d \ W {1,8} Zodpovedá „d…. &&&&“ v „d…. &&&& 5hi“

Zoskupovanie

Zoskupenie alebo zachytenie vám umožňuje použiť vzor na zachytenie a extrahovanie časti reťazca. Vzorec je teda nielen zladený, ale je zachytená aj časť reťazca, ktorá zodpovedá vzoru.

Vzor Popis Príklad Nájdené a zachytené zhody
(výraz) Zoskupí a zachytí vzor v zátvorkách (\ W {4}) Zoskupí a zachytí „@@@@“ z „1 @@@@ 1jlmba“

Ako používať Regex vo VBA

Aby ste mohli používať Regex vo VBA, musíte najskôr nastaviť referenciu v editore VBE. V editore VBE prejdite na Nástroje> Referencie> Regulárne výrazy Microsoft VBScript.

Toto sú vlastnosti objektu RegExp:

  • Vzor - Vzor, ktorý použijete na párovanie s reťazcom.
  • IgnoreCase - Ak je to pravda, zhoda ignoruje veľké a malé písmena.
  • Globálne - Ak je to pravda, potom sa nájdu všetky zhody vzoru v reťazci. Ak je nepravdivé, nájde sa iba prvá zhoda.
  • MultiLine - Ak je to pravda, k zhode vzorov dochádza cez konce riadkov.

Toto sú metódy objektu RegExp:

  • Test - Vyhľadá vzor v reťazci a vráti hodnotu True, ak sa nájde zhoda.
  • Vymeňte - Nahradí výskyty vzoru náhradným reťazcom.
  • Vykonať - Vráti zhody vzoru so reťazcom.

Testovanie vzoru na zápas proti reťazcu

Metódu Test môžete použiť na kontrolu, či sa vzor zhoduje so sekvenciou vo vstupnom reťazci. Ak sa nájde zhoda, výsledok je True. Nasledujúci kód vám ukáže, ako otestovať vzor na reťazci:

12345678910111213 SubregexTestingAPattern ()Dim stringOne As StringDim regexOne ako objektNastaviť regexOne = nový RegExpregexOne.Pattern = "f … .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)Koniec pod

Výsledkom je:

Výmena vzoru za reťazec

Metódu Replace môžete použiť na nahradenie prvej inštancie zodpovedajúceho vzoru v reťazci alebo všetkých inštancií zodpovedajúceho vzoru v reťazci. Ak je položka Global nastavená na hodnotu False, nahradí sa iba prvá inštancia. Nasledujúci kód vám ukáže, ako nahradiť vzor v reťazci:

1234567891011 SubregexReplacingAPattern ()Dim stringOne As StringDim regexOne ako objektNastaviť regexOne = nový RegExpregexOne.Pattern = "Toto je číslo"regexOne.Global = FalsestringOne = "Toto je číslo 718901"Debug.Print regexOne.Replace (stringOne, „To je nové číslo“)Koniec pod

Výsledkom je:

Ak chcete nahradiť iba číselnú časť vyššie použitého reťazca, použili by ste nasledujúci kód:

1234567891011 SubregexReplacingAPattern ()Dim stringOne As StringDim regexOne ako objektNastaviť regexOne = nový RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = FalsestringOne = "Toto je číslo 718901"Debug.Print regexOne.Replace (stringOne, "777192")Koniec pod

Výsledkom je:

Ak chcete nahradiť každú inštanciu určitého vzoru v reťazci, globálnu hodnotu by ste nastavili na True. Nasledujúci kód ukazuje, ako nahradiť každú inštanciu -A1289C- v reťazci:

1234567891011 SubregexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringDim regexOne ako objektNastaviť regexOne = nový RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = PravdastringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")Koniec pod

Priradenie a zobrazenie vzoru v reťazci

Metódu Execute môžete použiť na priradenie jednej alebo všetkých inštancií vzoru v rámci reťazca. Nasledujúci kód ukazuje, ako priradiť a zobraziť všetky inštancie vzoru z reťazca:

123456789101112131415161718 SubregexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne ako objektNastaviť regexOne = nový RegExpregexOne.Pattern = "A.C"regexOne.Global = PravdaregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Nastavte theMatches = regexOne.Execute (stringOne)Za každý zápas v zápasochDebug.Print Match.ValueĎalšieKoniec pod

Výsledkom je:

Povedzme, že sme z vyššie uvedeného reťazca chceli priradiť iba -ADC-. Nasledujúci kód ukazuje, ako z reťazca porovnať a zobrazovať iba -ADC-:

123456789101112131415161718 SubregexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne ako objektNastaviť regexOne = nový RegExpregexOne.Pattern = "\-\ A.C \-"regexOne.Global = FalseregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Nastavte theMatches = regexOne.Execute (stringOne)Za každý zápas v zápasochDebug.Print Match.ValueĎalšieKoniec pod

Regexu môže nejaký čas trvať, kým sa naučí, ale je to mimoriadne účinný nástroj na identifikáciu/manipuláciu so reťazcami textu. Je tiež široko používaný v programovacích jazykoch.

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave