VBA Regex

Obsah

Tento tutoriál předvede, jak používat Regex ve VBA.

Co je Regex?

Regex znamená regulární výraz. Regulární výraz je vzor tvořený posloupností znaků, které můžete použít k nalezení shodného vzoru v jiném řetězci. Abyste mohli ve VBA používat Regex, musíte použít objekt RegExp.

Vzorec, jako je [A-C], lze použít k vyhledání a přiřazení velkých písmen od A do C ze sekvence. Regexové vzory mají svou vlastní syntaxi a lze je vytvořit pomocí znaku nebo posloupnosti znaků.

Odpovídající postavy

Následující tabulka ukazuje syntaxi, která vám umožní vytvářet vzory Regex.

Syntaxe vzoru Popis Příklad Nalezené shody
. Odpovídá libovolnému jednotlivému znaku kromě vbNewLine f.n fanoušek, fon, f@n, fwn
[znaky] Odpovídá libovolnému jednotlivému znaku v závorkách [] [fn] Ve ventilátoru by odpovídalo pouze „f“ nebo „n“
[^znaky] Odpovídá libovolnému jednotlivému znaku, který není v závorkách [] [^fn] Takže by odpovídalo „j“ v „fjn“
[začátek-konec] Odpovídá libovolnému znaku, který je součástí rozsahu v závorkách [] [1-5] Odpovídá „4“ a „5“ v „45“
\ w Shoduje se s alfanumerickými znaky a podtržítkem, ale ne s mezerou \ w Odpovídalo by „c“ v „, c.“
\ W Shoduje se s jinými než alfanumerickými znaky a podtržítkem \ W Odpovídá „@“ v „bb@bb“
\ s Odpovídá libovolnému znaku prázdného místa, jako jsou mezery a tabulátory \ s Odpovídá “” v „Toto je”
\ S Odpovídá libovolnému znaku, který není prázdný \ S Odpovídá „T“ a „h“ v „T h“
\ d Odpovídá libovolné desítkové číslici \ d Odpovídá „7“ v „a7h“
\ D Shoduje se s jakoukoli jedinou bez desetinnou číslicí \ D Odpovídá „j“ v „47j“
\ Unikne speciálním znakům, které vám pak umožní je vyhledat \. Odpovídá „.“ v „59.pQ“
\ t Tab \ t Odpovídalo by znaku tabulátoru
\ r Návrat vozíku \ r Odpovídalo by návratu vozíku (vbCr)
\ n vbNewLine (vbTab) \ n Odpovídal by novému řádku

Kvantifikátory

Pomocí kvantifikátorů můžete určit, kolikrát chcete, aby se vzorek shodoval s řetězcem.

Kvantifikátor Popis Příklad Nalezené shody
* Odpovídá nulovému nebo více výskytům fn*a fna, fa, fnna, fnnna, fnfnnna
+ Odpovídá jednomu nebo více výskytům fn+a fna, fnna, fnfnna
? Odpovídá nule nebo jedné fn? a fa, fna
{n} Mnohokrát odpovídá „n“ d \ W {4} Odpovídá „d…“ v „d…. & 5hi“
{n,} Odpovídá alespoň „n “krát d \ W {4,} Odpovídá „d…. &“ V „d…. & 5hi“
{n, m} Počet shod mezi n a m d \ W {1,8} Odpovídá „d…. &&&&“ v „d…. &&&& 5hi“

Seskupení

Seskupení nebo zachycení vám umožňuje použít vzor k zachycení a extrahování části řetězce. Vzorec se tedy nejen shoduje, ale je zachycena i část řetězce, která odpovídá vzoru.

Vzor Popis Příklad Nalezené a zachycené zápasy
(výraz) Seskupuje a zachycuje vzor v závorkách (\ W {4}) Seskupí a zachytí „@@@@“ z „1 @@@@ 1jlmba“

Jak používat Regex ve VBA

Abyste mohli používat Regex ve VBA, musíte nejprve nastavit referenci v editoru VBE. V editoru VBE přejděte na Nástroje> Reference> Regulární výrazy Microsoft VBScript.

Toto jsou vlastnosti objektu RegExp:

  • Vzor - Vzor, který použijete pro porovnání s řetězcem.
  • Ignorovat případ - Pokud je to pravda, pak shoda ignoruje velká a malá písmena.
  • Globální - Pokud True, pak jsou nalezeny všechny shody vzoru v řetězci. Pokud je hodnota False, je nalezena pouze první shoda.
  • MultiLine - Pokud je to pravda, dochází ke shodě vzorů přes konce řádků.

Toto jsou metody objektu RegExp:

  • Test - Vyhledá vzor v řetězci a vrátí shodu True, pokud je nalezena shoda.
  • Nahradit - Nahradí výskyty vzoru náhradním řetězcem.
  • Vykonat - Vrací shody vzoru proti řetězci.

Testování vzoru pro shodu proti řetězci

Metodu Test můžete použít ke kontrole, zda vzor odpovídá sekvenci ve vstupním řetězci. Výsledek je True, pokud je nalezena shoda. Následující kód vám ukáže, jak otestovat vzor na řetězci:

12345678910111213 Sub RegexTestingAPattern ()Dim stringJeden jako řetězecDim regexOne jako objektNastavit regexOne = New RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)End Sub

Výsledek je:

Výměna vzoru v řetězci

Metodu Replace můžete použít k nahrazení první instance odpovídajícího vzoru v řetězci nebo všech instancí shodného vzoru v řetězci. Pokud je Global nastaveno na False, bude nahrazena pouze první instance. Následující kód vám ukáže, jak nahradit vzor v řetězci:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne jako objektNastavit regexOne = New RegExpregexOne.Pattern = "Toto je číslo"regexOne.Global = FalsestringOne = "Toto je číslo 718901"Debug.Print regexOne.Replace (stringOne, "To je nové číslo")End Sub

Výsledek je:

Chcete -li nahradit pouze část čísla výše použitého řetězce, použijte následující kód:

1234567891011 Sub RegexReplacingAPattern ()Dim stringJeden jako řetězecDim regexOne jako objektNastavit regexOne = New RegExpregexOne.Pattern = "[^\ D]+"regexOne.Global = FalsestringOne = "Toto je číslo 718901"Debug.Print regexOne.Replace (stringOne, "777192")End Sub

Výsledek je:

Chcete -li nahradit každou instanci určitého vzoru v řetězci, nastavíte globální hodnotu na True. Následující kód ukazuje, jak nahradit každou instanci -A1289C- v řetězci:

1234567891011 SubregexReplacingEveryInstanceOfAPattern ()Dim stringJeden jako řetězecDim regexOne jako objektNastavit regexOne = New RegExpregexOne.Pattern = "\ W \ A \ d+C \ W"regexOne.Global = TruestringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")End Sub

Shoda a zobrazení vzoru v řetězci

Metodu Execute můžete použít k přiřazení jedné nebo všech instancí vzoru v řetězci. Následující kód ukazuje, jak porovnat a zobrazit všechny instance vzoru z řetězce:

123456789101112131415161718 SubregexMatchingAndDisplayingAPattern ()Dim stringJeden jako řetězecDim regexOne jako objektNastavit regexOne = New RegExpregexOne.Pattern = "A.C"regexOne.Global = TrueregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Nastavte theMatches = regexOne.Execute (stringOne)Za každý zápas v zápasechDebug.Print Match.ValuedalšíEnd Sub

Výsledek je:

Řekněme, že jsme z výše uvedeného řetězce chtěli spojit pouze -ADC-. Následující kód ukazuje, jak z řetězce porovnat a zobrazit pouze -ADC-:

123456789101112131415161718 SubregexMatchingAndDisplayingAPattern ()Dim stringJeden jako řetězecDim regexOne jako objektNastavit regexOne = New 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ápasechDebug.Print Match.ValuedalšíEnd Sub

Učení regexu může nějakou dobu trvat, ale je to extrémně účinný nástroj pro identifikaci/manipulaci s řetězci textu. Je také široce používán v programovacích jazycích.

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave