Como usar RegEx no Microsoft Word - Dicas do Excel

Lissa pergunta:

Existe uma maneira de alterar um número (sempre um número aleatório) após a palavra raposa? Exemplo: raposa 23, urso 1, raposa 398, sapo 12, raposa 15. Quero mudar o número para a mesma cor da palavra raposa.

Podemos localizar e substituir por formato no Microsoft Word. Este é um ótimo recurso para localizar rapidamente o texto formatado e até mesmo substituir todo o formato do texto no documento.

Selecione Localização Avançada na faixa de opções.

Diálogo Localizar e Substituir

Insira o texto a ser encontrado, clique no botão Mais para ver as opções avançadas e clique no botão Formatar.

Opções de pesquisa avançadas

Selecione a opção Fonte nas configurações, então você pode configurar a cor do texto que você gostaria de encontrar no documento. Clique em OK para fechar a janela de diálogo Localizar fonte.

Selecione a cor do texto na caixa de diálogo Localizar fonte.

Clique em Localizar próximo e você verá que a primeira ocorrência do texto pesquisado em uma determinada cor será selecionada.

Encontre Próximo para encontrar a primeira ocorrência.

Também podemos fazer pesquisas mais complicadas usando curingas. No entanto, o módulo de pesquisa nativo do Word não nos permite fazer uma pesquisa como Lissa pediu.

É aí que podemos chamar RegEx para o jogo!

Biblioteca de expressões regulares VBSCript

O VBA não vem com nenhum suporte para expressões regulares. No entanto, a biblioteca Microsoft VBScript contém recursos poderosos de expressão regular. Esta biblioteca faz parte do Internet Explorer 5.5 e posterior, portanto, está disponível em todos os computadores que executam o Windows XP, Vista, 7, 8, 8.1 ou 10.

Usuários Mac

Como o Internet Explorer não é um aplicativo Mac, esta biblioteca não existe no Mac. Portanto, os exemplos de VBA abaixo não funcionam no Mac.

Para usar esta biblioteca em VBA, mude para VBE, selecione Project and References no menu VBE, role a lista para baixo para encontrar o item "Microsoft VBScript Regular Expressions 5.5" e marque-o para incluir no aplicativo.

Biblioteca de expressões regulares VBScript

Insira um novo módulo e copie e cole o código a seguir neste módulo.

Sub doRegexFind() Dim strSample As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "fox d+" .Global = True .IgnoreCase = True Set matches = .Execute(strSample) For Each fnd In matches Debug.Print fnd Next fnd End With End Sub

Este procedimento pega o texto de amostra, encontra os códigos do produto pelo padrão fornecido - que está começando com "raposa", um espaço único e um número, e imprime os códigos correspondentes na janela Imediata (pressione Ctrl + G no VBE se não for já visível).

Códigos de produtos correspondentes impressos na janela Imediata.

d+ A classe de caracteres no padrão define um ou mais caracteres numéricos e o padrão é basicamente o prefixo "raposa" seguido por um espaço seguido por números.

Mais informações

Visite Regular Expression Language - Quick Reference para obter mais informações sobre escapes de caracteres, classes de caracteres e âncoras.

Copie e cole o código a seguir para ver o RegEx em ação para remover os espaços dos códigos do produto.

Sub doRegexFindReplace() Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim strSample As String strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "(fox) (d+)" .Global = True .IgnoreCase = True strSample = .Replace(strSample, "$1$2") End With Debug.Print strSample End Sub

Este procedimento substitui o conteúdo do texto de amostra removendo os espaços dos códigos de produto correspondentes ao padrão fornecido e imprime o texto do resultado na janela Imediato.

Texto substituído impresso na janela Imediata.

Observe que o padrão é ligeiramente diferente do primeiro código. Os termos neste padrão são colocados entre parênteses e os termos correspondentes são usados ​​no método Substituir como $ 1 e $ 2 em ordem. Este procedimento simplesmente une os dois termos sem espaços.

Voltar para a pergunta

Vamos voltar ao texto de exemplo que usamos no início deste artigo.

Texto de amostra

Precisamos encontrar "raposa" seguido de caracteres numéricos e alterar a correspondência usando a cor da seção "raposa" no texto correspondente.

Embora RegEx corresponda muito bem ao padrão fornecido, ele não pode substituir a cor do texto no documento do Word. Portanto, combinaremos os métodos RegEx e Word VBA no procedimento a seguir.

Aqui estão as etapas:

  1. Encontre as correspondências com RegEx.
  2. Pesquise cada texto correspondido usando o método Word Find.
  3. Encontre a cor da primeira palavra no intervalo encontrado.
  4. Altere a cor do intervalo encontrado com a cor da etapa anterior.

Mude para VBE e insira um novo módulo. Certifique-se de que a biblioteca VBScript Regular Expressions seja adicionada ao projeto e copie e cole o código a seguir neste novo módulo.

Sub doRegexMagic() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Set objRegex = New RegExp str = "fox" With Selection .HomeKey wdStory .WholeStory End With With objRegex .Pattern = str & " d+" .Global = True .IgnoreCase = True Set matches = .Execute(Selection.Text) End With With Selection .HomeKey wdStory With .Find .ClearFormatting .Forward = True .Format = False .MatchCase = True For Each fnd In matches .Text = fnd .Execute With Selection .Font.Fill.ForeColor = .Range.Words(1).Font.TextColor .MoveRight wdCharacter End With Next fnd End With .HomeKey wdStory End With End Sub 

Execute o código e aqui está o resultado.

Resultado

Baixar arquivo do Word

Para baixar o arquivo do Word: how-to-use-regex-in-microsoft-word.docm

RegEx no Excel?

Regex está completamente ausente do Excel. No entanto, ainda podemos usar Expressões regulares VBScript no Excel VBA.

Launch Excel, open a new workbook, and create the content as shown below.

Sample data in Excel

Reference

This article has been inspired by Learn Excel 2010 - "Find & Replace Color of A Certain Word": Podcast #1714 published by Bill Jelen on May 21, 2013! So we wanted to use similar sample text as he used in the video. We just added numbers after the "fox".

Switch to VBE, and insert a new module. Make sure VBScript Regular Expressions library is added to the project just like you did in Word, and copy and paste the following code into this new module.

Sub doRegexMagicInExcel() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim rng As Range Dim cll As Range Set objRegex = New RegExp Set rng = Selection str = "fox" With objRegex .Pattern = "(" & str & ") (d+)" .Global = True .IgnoreCase = True For Each cll In rng.Cells Set matches = .Execute(cll.Value) For Each fnd In matches cll.Value = .Replace(cll.Value, "$1$2") Next fnd Next cll End With End Sub

Return to worksheet, and select the range with sample text. Run the macro, and see the result.

Result in Excel

This procedure loops through the cells in the selected range, replaces the text in the cells by removing the spaces from the product codes matched with the given RegEx pattern.

Download Excel File

To download the Excel file: how-to-use-regex-in-microsoft-excel.xlsm

Artigos interessantes...