VBA Regex

Índice

Este tutorial demonstrará como usar o Regex no VBA.

O que é Regex?

Regex significa expressão regular. Uma expressão regular é um padrão composto de uma sequência de caracteres que você pode usar para encontrar um padrão correspondente em outra string. Para usar o Regex no VBA, você deve usar o objeto RegExp.

Um padrão como [A-C] pode ser usado para pesquisar e combinar uma letra maiúscula de A a C de uma sequência. Os padrões regex têm sua própria sintaxe e podem ser construídos usando um caractere ou uma sequência de caracteres.

Personagens Combinando

A tabela a seguir mostra a sintaxe que permitirá que você crie padrões Regex.

Sintaxe de padrão Descrição Exemplo Jogos encontrados
. Corresponde a qualquer caractere único, exceto vbNewLine f.n fan, fon, f @ n, fwn
[personagens] Corresponde a qualquer caractere único entre colchetes [] [fn] Só corresponderia a “f” ou “n” em leque
[caracteres] Corresponde a qualquer caractere único que não esteja entre colchetes [] [fn] Então, corresponderia a “j” em “fjn”
[inicio fim] Corresponde a qualquer caractere que faça parte do intervalo entre colchetes [] [1-5] Corresponderia a “4” e “5” em “45”
\C Corresponde a caracteres alfanuméricos e o sublinhado, mas não o caractere de espaço \C Corresponderia a “c” em “, c.”
\C Corresponde a qualquer caractere não alfanumérico e o sublinhado \C Corresponderia a “@” em “bb @ bb”
\ s Corresponde a qualquer caractere de espaço em branco, como espaços e tabulações \ s Corresponderia a ”” em “Isto é”
\ S Corresponde a qualquer caractere diferente de espaço em branco \ S Corresponderia a “T” e “h” em “T h”
\ d Corresponde a qualquer dígito decimal único \ d Corresponderia a “7” em “a7h”
\ D Corresponde a qualquer dígito não decimal único \ D Corresponderia a j em “47j”
\ Escapa caracteres especiais que permitem pesquisá-los \. Corresponderia a “.” em “59.pQ”
\ t Aba \ t Corresponderia a um caractere de tabulação
\ r Retorno de carruagem \ r Corresponderia a um retorno de carro (vbCr)
\ n vbNewLine (vbTab) \ n Corresponderia a uma nova linha

Quantificadores

Você pode usar quantificadores para especificar quantas vezes deseja que o padrão corresponda à string.

Quantificador Descrição Exemplo Jogos encontrados
* Corresponde a zero ou mais ocorrências fn * a fna, fa, fnna, fnnna, fnfnnna
+ Corresponde a uma ou mais ocorrências fn + a fna, fnna, fnfnna
? Corresponde a zero ou um fn? a fa, fna
{n} Corresponde a “n” muitas vezes d \ W {4} Corresponderia a “d….” em “d…. & 5hi”
{n,} Corresponde pelo menos “n” número de vezes d \ W {4,} Corresponderia a “d…. &” Em “d…. & 5hi”
{n, m} Corresponde entre n e m número de vezes d \ W {1,8} Corresponderia a “d…. &&&&” em “d…. &&&& 5hi”

Agrupamento

Agrupar ou capturar permite que você use um padrão para capturar e extrair uma parte de uma string. Portanto, não apenas o padrão é correspondido, mas a parte da string que corresponde ao padrão é capturada.

Padrão Descrição Exemplo Jogos encontrados e capturados
(expressão) Agrupa e captura o padrão entre parênteses (\ W {4}) Agruparia e capturaria “@@@@” de “1 @@@@ 1jlmba”

Como usar Regex no VBA

Para usar o Regex no VBA, primeiro você deve definir a referência no editor do VBE. No editor VBE, vá para Ferramentas> Referências> Expressões regulares do Microsoft VBScript.

Estas são as propriedades do objeto RegExp:

  • Padrão - O padrão que você usará para combinar com a string.
  • Ignorar caso - Se for True, a correspondência ignora maiúsculas e minúsculas.
  • Global - Se for verdadeiro, todas as correspondências do padrão na string serão encontradas. Se for False, apenas a primeira correspondência será encontrada.
  • MultiLine - Se verdadeiro, a correspondência de padrões ocorre entre as quebras de linha.

Estes são os métodos do objeto RegExp:

  • Teste - Procura um padrão em uma string e retorna True se uma correspondência for encontrada.
  • Substituir - Substitui as ocorrências do padrão pela string de substituição.
  • Executar - Retorna correspondências do padrão em relação à string.

Testando um padrão para uma correspondência com uma string

Você pode usar o método Test para verificar se um padrão corresponde a uma sequência na string de entrada. O resultado é True se uma correspondência for encontrada. O código a seguir mostrará como testar um padrão em uma string:

12345678910111213 Sub RegexTestingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)End Sub

O resultado é:

Substituindo um padrão em uma string

Você pode usar o método Replace para substituir a primeira instância de um padrão correspondente em uma string ou todas as instâncias de um padrão correspondente em uma string. Se Global for definido como False, apenas a primeira instância será substituída. O código a seguir mostrará como substituir um padrão em uma string:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "Este é o número"regexOne.Global = FalsestringOne = "Este é o número 718901"Debug.Print regexOne.Replace (stringOne, "Esse é o novo número")End Sub

O resultado é:

Para substituir apenas a parte do número da string usada acima, você usaria o seguinte código:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "[\ D] +"regexOne.Global = FalsestringOne = "Este é o número 718901"Debug.Print regexOne.Replace (stringOne, "777192")End Sub

O resultado é:

Para substituir cada instância de um certo padrão em uma string, você deve definir o valor global como True. O código a seguir mostra como substituir cada instância de -A1289C- na string:

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "\ W \ A \ d + C \ W"regexOne.Global = TruestringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")End Sub

Correspondência e exibição de um padrão em uma string

Você pode usar o método Execute para corresponder a uma ou todas as instâncias de um padrão em uma string. O código a seguir mostra como combinar e exibir todas as instâncias do padrão da string:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "A.C"regexOne.Global = TrueregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Defina theMatches = regexOne.Execute (stringOne)Para cada partida nas correspondênciasDebug.Print Match.ValuePróximoEnd Sub

O resultado é:

Digamos que só quiséssemos corresponder -ADC- da string acima. O código a seguir mostra como corresponder e exibir apenas -ADC- da string:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringDim regexOne As ObjectDefinir regexOne = Novo RegExpregexOne.Pattern = "\ - \ A.C \ -"regexOne.Global = FalseregexOne.IgnoreCase = IgnoreCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Defina theMatches = regexOne.Execute (stringOne)Para cada partida nas correspondênciasDebug.Print Match.ValuePróximoEnd Sub

Regex pode levar algum tempo para aprender, mas é uma ferramenta extremamente poderosa para identificar / manipular strings de texto. Ele também é amplamente usado em linguagens de programação.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave