Acest tutorial va arăta cum să utilizați Regex în VBA.
Ce este Regex?
Regex înseamnă expresie regulată. O expresie regulată este un model format dintr-o secvență de caractere pe care le puteți utiliza pentru a găsi un model de potrivire într-un alt șir. Pentru a utiliza Regex în VBA trebuie să utilizați obiectul RegExp.
Un model precum [A-C] poate fi folosit pentru a căuta și a potrivi o literă mare de la A la C dintr-o secvență. Modelele Regex au propria sintaxă și pot fi construite folosind un caracter sau o secvență de caractere.
Caracterele potrivite
Următorul tabel prezintă sintaxa care vă va permite să creați modele Regex.
Sintaxa modelului | Descriere | Exemplu | Meciuri găsite |
---|---|---|---|
. | Se potrivește cu orice caracter, cu excepția vbNewLine | f.n | fan, fon, f @ n, fwn |
[personaje] | Potrivește orice caracter între paranteze [] | [fn] | S-ar potrivi doar cu „f” sau „n” în ventilator |
[caractere] | Se potrivește cu orice caracter care nu este între paranteze [] | [fn] | Deci s-ar potrivi cu „j” în „fjn” |
[început-sfârșit] | Se potrivește cu orice caracter care face parte din intervalul dintre paranteze [] | [1-5] | S-ar potrivi cu „4” și „5” în „45” |
\ w | Se potrivește cu caractere alfanumerice și cu subliniul, dar nu cu caracterul spațial | \ w | S-ar potrivi cu „c” în „, c”. |
\ W | Se potrivește cu orice caractere non-alfanumerice și cu subliniul | \ W | S-ar potrivi cu „@” în „bb @ bb” |
\ s | Se potrivește cu orice caracter al spațiului alb, cum ar fi spațiile și filele | \ s | S-ar potrivi ”” în „Acesta este” |
\ S | Se potrivește cu orice caracter spațial care nu este alb | \ S | S-ar potrivi cu „T” și „h” în „T h” |
\ d | Se potrivește cu o singură cifră zecimală | \ d | S-ar potrivi cu „7” în „a7h” |
\ D | Se potrivește cu orice cifră non-zecimală | \ D | S-ar potrivi cu j în „47j” |
\ | Scapă de caractere speciale care vă permit apoi să le căutați | \. | S-ar potrivi cu „.” în „59.pQ” |
\ t | Tab | \ t | S-ar potrivi cu un caracter tab |
\ r | Retur transport | \ r | S-ar potrivi cu o întoarcere la vagon (vbCr) |
\ n | vbNewLine (vbTab) | \ n | S-ar potrivi cu o nouă linie |
Cuantificatoare
Puteți utiliza cuantificatoare pentru a specifica de câte ori doriți ca modelul să se potrivească cu șirul.
Cuantificator | Descriere | Exemplu | Meciuri găsite |
---|---|---|---|
* | Se potrivește cu zero sau mai multe apariții | fn * a | fna, fa, fnna, fnnna, fnfnnna |
+ | Se potrivește cu una sau mai multe apariții | fn + a | fna, fnna, fnfnna |
? | Se potrivește cu zero sau cu unul | fn? a | fa, fna |
{n} | Se potrivește „n” de multe ori | d \ W {4} | S-ar potrivi cu „d ….” în „d …. & 5hi” |
{n,} | Se potrivește cel puțin „n” de câte ori | d \ W {4,} | S-ar potrivi cu „d …. &” În „d…. & 5hi” |
{n, m} | Se potrivește între n și m de câte ori | d \ W {1,8} | S-ar potrivi cu „d …. &&&&” în „d…. &&&& 5hi” |
Gruparea
Gruparea sau capturarea vă permite să utilizați un model pentru a captura și extrage o porțiune a unui șir. Deci, nu numai că modelul se potrivește, dar și partea din șir care se potrivește cu modelul este capturată.
Model | Descriere | Exemplu | Meciuri găsite și capturate |
---|---|---|---|
(expresie) | Grupează și captează modelul în paranteză | (\ W {4}) | Ar grupa și captura „@@@@” din „1 @@@@ 1jlmba” |
Cum se folosește Regex în VBA
Pentru a utiliza Regex în VBA, trebuie mai întâi să setați referința în editorul VBE. În editorul VBE, accesați Instrumente> Referințe> Expresii regulate Microsoft VBScript.
Acestea sunt proprietățile obiectului RegExp:
- Model - Modelul pe care îl veți folosi pentru potrivirea cu șirul.
- IgnoreCase - Dacă este adevărat, atunci potrivirea ignoră literele majuscule.
- Global - Dacă este adevărat, se găsesc toate potrivirile modelului din șir. Dacă este fals, se găsește doar primul meci.
- MultiLine - Dacă este adevărat, potrivirea modelului are loc între întreruperi de linie.
Acestea sunt metodele obiectului RegExp:
- Test - Caută un model într-un șir și returnează True dacă se găsește o potrivire.
- A inlocui - Înlocuiește aparițiile modelului cu șirul de înlocuire.
- A executa - Returnează meciurile modelului împotriva șirului.
Testarea unui model pentru o potrivire împotriva unui șir
Puteți utiliza metoda Test pentru a verifica dacă un model se potrivește cu o secvență din șirul de intrare. Rezultatul este adevărat dacă se găsește o potrivire. Următorul cod vă va arăta cum să testați un model pe un șir:
12345678910111213 | Sub RegexTestingAPattern ()Dim stringOne As StringDim regexOne As ObjectSetați regexOne = New RegExpregexOne.Pattern = "f … .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)Sfârșitul Sub |
Rezultatul este:
Înlocuirea unui model într-un șir
Puteți utiliza metoda Înlocuire pentru a înlocui prima instanță a unui model de potrivire dintr-un șir sau toate instanțele unui model de potrivire dintr-un șir. Dacă Global este setat la False, atunci numai prima instanță este înlocuită. Următorul cod vă va arăta cum să înlocuiți un model într-un șir:
1234567891011 | Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne Ca obiectSetați regexOne = New RegExpregexOne.Pattern = "Acesta este numărul"regexOne.Global = FalsstringOne = "Acesta este numărul 718901"Debug.Print regexOne.Replace (stringOne, „Acesta este noul număr”)Sfârșitul Sub |
Rezultatul este:
Pentru a înlocui doar porțiunea numerică a șirului utilizat mai sus, ar trebui să utilizați următorul cod:
1234567891011 | Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectSetați regexOne = New RegExpregexOne.Pattern = "[\ D] +"regexOne.Global = FalsstringOne = "Acesta este numărul 718901"Debug.Print regexOne.Replace (stringOne, "777192")Sfârșitul Sub |
Rezultatul este:
Pentru a înlocui fiecare instanță a unui anumit model dintr-un șir, ați seta valoarea globală la True. Următorul cod vă arată cum să înlocuiți fiecare instanță a -A1289C- în șir:
1234567891011 | Sub RegexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringDim regexOne As ObjectSetați regexOne = New RegExpregexOne.Pattern = "\ W \ A \ d + C \ W"regexOne.Global = AdevăratstringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")Sfârșitul Sub |
Potrivirea și afișarea unui model într-un șir
Puteți utiliza metoda Execute pentru a potrivi una sau toate instanțele unui model dintr-un șir. Următorul cod vă arată cum să potriviți și să afișați toate instanțele modelului din șir:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne Ca obiectSetați regexOne = New RegExpregexOne.Pattern = "A.C"regexOne.Global = AdevăratregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Setați TheMatches = regexOne.Execute (stringOne)Pentru fiecare meci din meciuriDebug.Print Match.ValueUrmătorulSfârșitul Sub |
Rezultatul este:
Să presupunem că am vrut să potrivim doar -ADC- din șirul de mai sus. Următorul cod arată cum să se potrivească și să se afișeze numai -ADC- din șir:
123456789101112131415161718 | Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectSetați regexOne = New RegExpregexOne.Pattern = "\ - \ A.C \ -"regexOne.Global = FalsregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Setați TheMatches = regexOne.Execute (stringOne)Pentru fiecare meci din meciuriDebug.Print Match.ValueUrmătorulSfârșitul Sub |
Regex poate dura ceva timp pentru a învăța, dar este un instrument extrem de puternic pentru identificarea / manipularea șirurilor de text. De asemenea, este utilizat pe scară largă în toate limbajele de programare.