Regex VBA

Sommario

Questo tutorial dimostrerà come utilizzare Regex in VBA.

Cos'è Regex?

Regex sta per espressione regolare. Un'espressione regolare è un modello costituito da una sequenza di caratteri che è possibile utilizzare per trovare un modello corrispondente in un'altra stringa. Per utilizzare Regex in VBA devi usare l'oggetto RegExp.

Un modello come [A-C] può essere utilizzato per cercare e abbinare una lettera maiuscola da A a C da una sequenza. I modelli Regex hanno una propria sintassi e possono essere costruiti utilizzando un carattere o una sequenza di caratteri.

Personaggi corrispondenti

La tabella seguente mostra la sintassi che ti consentirà di creare modelli Regex.

Sintassi del modello Descrizione Esempio Corrispondenze trovate
. Corrisponde a qualsiasi singolo carattere eccetto vbNewLine f.n fan, fon, f@n, fwn
[caratteri] Corrisponde a qualsiasi singolo carattere tra parentesi [] [fn] Corrisponderebbe solo a "f" o "n" in fan
[^personaggi] Corrisponde a qualsiasi singolo carattere che non sia tra parentesi [] [^fn] Quindi corrisponderebbe a "j" in "fjn"
[inizio-fine] Corrisponde a qualsiasi carattere che fa parte dell'intervallo tra parentesi[] [1-5] Corrisponde a "4" e "5" in "45"
\w Corrisponde ai caratteri alfanumerici e al carattere di sottolineatura, ma non al carattere di spazio \w Corrisponde a "c" in ",c."
\W Corrisponde a qualsiasi carattere non alfanumerico e al carattere di sottolineatura \W Corrisponde a "@" in "bb@bb"
\S Corrisponde a qualsiasi carattere di spazio vuoto come spazi e tabulazioni \S Corrisponde a " " in "Questo è"
\S Corrisponde a qualsiasi carattere non di spazio bianco \S Corrisponde a "T" e "h" in "T h"
\D Corrisponde a qualsiasi singola cifra decimale \D Corrisponde a "7" in "a7h"
\D Corrisponde a qualsiasi singola cifra non decimale \D Corrisponde a j in "47j"
\ Sfugge ai caratteri speciali che poi ti permettono di cercarli \. Corrisponde a "." in “59.pQ”
\T tab \T Corrisponderebbe a un carattere di tabulazione
\R Ritorno a capo \R Corrisponde a un ritorno a capo (vbCr)
\n vbNewLine(vbTab) \n Corrisponderebbe a una nuova linea

quantificatori

È possibile utilizzare i quantificatori per specificare quante volte si desidera che il pattern corrisponda alla stringa.

Quantificatore Descrizione Esempio Corrispondenze trovate
* Corrisponde a zero o più occorrenze fn*a fna, fa, fnna, fnnna, fnfnnna
+ Corrisponde a una o più occorrenze fn+a fna, fnna, fnfnna
? Corrisponde a zero o uno fn?a fa, fna
{n} Corrisponde a "n" molte volte d\W{4} Corrisponde a "d…" in “d… .&5hi”
{n,} Corrisponde ad almeno "n" numero di volte d\W{4,} Corrisponde a "d… .&" in "d… .&5hi"
{n,m} Corrispondenze tra n e m numero di volte d\W{1,8} Corrisponde a "d… .&&&&" in "d… .&&&&5hi"

Raggruppamento

Il raggruppamento o l'acquisizione consente di utilizzare un modello per acquisire ed estrarre una parte di una stringa. Quindi non solo viene abbinato il modello, ma viene catturata la parte della stringa che corrisponde al modello.

Modello Descrizione Esempio Corrispondenze trovate e catturate
(espressione) Raggruppa e cattura il modello tra parentesi (\W{4}) Raggrupperebbe e catturerebbe "@@@@" da "1@@@@1jlmba"

Come utilizzare le espressioni regolari in VBA

Per utilizzare Regex in VBA, devi prima impostare il riferimento nell'editor VBE. Nell'editor VBE, vai a Strumenti > Riferimenti > Espressioni regolari Microsoft VBScript.

Queste sono le proprietà dell'oggetto RegExp:

  • Modello - Il modello che utilizzerai per la corrispondenza con la stringa.
  • Ignora Caso - Se True, la corrispondenza ignora le maiuscole.
  • Globale - Se True, vengono trovate tutte le corrispondenze del modello nella stringa. Se False, viene trovata solo la prima corrispondenza.
  • MultiLine - Se True, la corrispondenza del modello avviene attraverso le interruzioni di riga.

Questi sono i metodi dell'oggetto RegExp:

  • Test - Cerca un modello in una stringa e restituisce True se viene trovata una corrispondenza.
  • Sostituire - Sostituisce le occorrenze del modello con la stringa di sostituzione.
  • Eseguire - Restituisce le corrispondenze del modello rispetto alla stringa.

Testare un modello per una corrispondenza contro una stringa

È possibile utilizzare il metodo Test per verificare se un pattern corrisponde a una sequenza nella stringa di input. Il risultato è True se viene trovata una corrispondenza. Il codice seguente ti mostrerà come testare un pattern su una stringa:

12345678910111213 Sub RegexTestAPattern()Dim stringOne As StringDim regexOne come oggettoImposta regexOne = Nuova RegExpregexOne.Pattern = "f… .a"stringaUno = "000111fjo88a8"Debug.Print regexOne.Test(stringOne)Fine sottotitolo

Il risultato è:

Sostituzione di un motivo in una stringa

È possibile utilizzare il metodo Replace per sostituire la prima istanza di un criterio di corrispondenza in una stringa o tutte le istanze di un criterio di corrispondenza in una stringa. Se Global è impostato su False, viene sostituita solo la prima istanza. Il codice seguente ti mostrerà come sostituire un modello in una stringa:

1234567891011 Sub RegexSostituzionePattern()Dim stringOne As StringDim regexOne come oggettoImposta regexOne = Nuova RegExpregexOne.Pattern = "Questo è il numero"regexOne.Global = FalsestringOne = "Questo è il numero 718901"Debug.Print regexOne.Replace(stringOne, "Questo è il nuovo numero")Fine sottotitolo

Il risultato è:

Per sostituire solo la parte numerica della stringa usata sopra, dovresti usare il seguente codice:

1234567891011 Sub RegexSostituzionePattern()Dim stringOne As StringDim regexOne come oggettoImposta regexOne = Nuova RegExpregexOne.Pattern = "[^\D]+"regexOne.Global = FalsestringOne = "Questo è il numero 718901"Debug.Print regexOne.Replace(stringOne, "777192")Fine sottotitolo

Il risultato è:

Per sostituire ogni istanza di un determinato modello in una stringa, imposteresti il ​​valore globale su True. Il codice seguente mostra come sostituire ogni istanza di -A1289C- nella stringa:

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern()Dim stringOne As StringDim regexOne come oggettoImposta regexOne = Nuova RegExpregexOne.Pattern = "\W\A\d+C\W"regexOne.Global = TruestringaUno = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace(stringOne, "IJK")Fine sottotitolo

Abbinamento e visualizzazione di un motivo in una stringa

È possibile utilizzare il metodo Execute per abbinare una o tutte le istanze di un modello all'interno di una stringa. Il codice seguente mostra come abbinare e visualizzare tutte le istanze del modello dalla stringa:

123456789101112131415161718 Sub RegexCorrispondenzaEVisualizzazionePattern()Dim stringOne As StringDim regexOne come oggettoImposta regexOne = Nuova RegExpregexOne.Pattern = "AC"regexOne.Global = TrueregexOne.IgnoreCase = IgnoreCasestringaUno = "ABC-A1289C-ADC-A1289C-AJC"Imposta le corrispondenze = regexOne.Execute(stringOne)Per ogni partita nelle partiteDebug.Print Match.ValueProssimoFine sottotitolo

Il risultato è:

Diciamo che volevamo solo far corrispondere -ADC- dalla stringa sopra. Il codice seguente mostra come abbinare e visualizzare solo -ADC- dalla stringa:

123456789101112131415161718 Sub RegexCorrispondenzaEVisualizzazionePattern()Dim stringOne As StringDim regexOne come oggettoImposta regexOne = Nuova RegExpregexOne.Pattern = "\-\A.C\-"regexOne.Global = FalseregexOne.IgnoreCase = IgnoreCasestringaUno = "ABC-A1289C-ADC-A1289C-AEC"Imposta le corrispondenze = regexOne.Execute(stringOne)Per ogni partita nelle partiteDebug.Print Match.ValueProssimoFine sottotitolo

Regex può richiedere del tempo per l'apprendimento, ma è uno strumento estremamente potente per identificare/manipolare stringhe di testo. È anche ampiamente utilizzato nei linguaggi di programmazione.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave