VBA Regex

Cuprins

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.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave