Pesquisa de curingas do Word 2010 - Localizar texto no formato ABC.DEF.XYZ

3

Estou tentando encontrar texto no Word 2010 no seguinte formato: ABC.DEF.XYZ. Isso é essencialmente encontrar referências de código, usando a sintaxe Java, escritas no documento do Word. Por favor, note que uma referência de 3 elementos é apenas um exemplo. As referências reais têm um mínimo de 2 elementos e até 5 elementos.

Eu tentei várias combinações de caracteres coringa (e não-curinga) para que isso funcionasse, mas não tive sorte. Aqui estão algumas das coisas que eu tentei:

  1. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    NOTA, isso realmente funciona para encontrar uma referência de 2 elementos. Foi atingido ou perdido ao encontrar o padrão em uma string maior (por exemplo, elementos correspondentes 2 e 3 de uma referência de 3 elementos)

  2. <([a-z0-9A-Z]@)>(.<([a-z0-9A-Z]@)>)@
    Dá um erro - padrão inválido

  3. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    Leva tanto tempo para executar esse Word pendurado por mais de 15 minutos e não encontrou um único jogo (documento é de cerca de 150 páginas de texto, então talvez fosse demais para ele lidar)

  4. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    O Word realmente caiu quando tentei este.

Idealmente, acho que uma versão funcional do segundo seria ideal - no entanto, não sei como tornar o padrão válido.

Se isso não for possível, eu poderia usar o número 1 e esperar que ele capture tudo (não sei por que ele combina com certas strings e não combina com outras).

Qualquer ajuda é muito apreciada.

    
por zakaluka 14.09.2015 / 17:57

2 respostas

1

Você pode usar o mecanismo VBA RegEx do Word em vez da pesquisa com curinga do Word.

Ok, a tarefa era encontrar todas as strings com o seguinte padrão

###.###  
###.###.###
###.###.###.###
###.###.###.###.###

O melhor padrão que eu pude criar foi

([\w\d]{3}\.){1,4}[\w\d]{3}

que retorna os seguintes hits marcados com amarelo

Explicaçãodopadrão

  • \wcorrespondeaumúnicocaracteredeA-z.Nãofazdistinçãoentremaiúsculaseminúsculas
  • \dcorrespondeaumdígito0-9
  • [\w\d]{3}correspondea3caracteresoudígitoscomoABC,abc,123,Ab1-masnãoA$CouABCD
  • ([\w\d]{3}\.){1,4}correspondea1,2,3ou4gruposcomoseguinteponto\..Oúltimogrupo[\w\d]{3}nãopedeumpontoseguinte

MacroVBA

PressioneALT+F11paraabriroeditordoVBA.Coleocódigoemqualquerlugareexecute-ocomF5

Sub RegExMark() Dim RegEx As Object Set RegEx = CreateObject("VBScript.RegExp") RegEx.Global = True RegEx.Pattern = "([\w\d]{3}\.){1,4}[\w\d]{3}" Set Matches = RegEx.Execute(ActiveDocument.Range) For Each hit In Matches Debug.Print hit ActiveDocument.Range(hit.FirstIndex, hit.FirstIndex + hit.Length). _ HighlightColorIndex = wdYellow Next hit End Sub

Advertência

Como marcado em vermelho na imagem de exemplo, o padrão atual tem uma falha e também corresponde a substrings de cadeias que são muito longas. Eu joguei um pouco com \b , [^\.] e \s , mas nenhum deles funcionou para todos os casos. Talvez outros usuários possam encontrar uma solução válida?

Recursos usados

por 19.09.2015 / 16:26
0

Sugiro copiar o texto para o Notepad ++ e, em seguida, usar a opção RegEx para fazer as alterações.

Eu sei que parece uma dor, mas quando você se acostuma, você pode se mover entre os programas muito rapidamente.

O RegEx é uma opção na janela Localizar / Substituir no Notepad ++. Outros editores têm o mesmo recurso.

Ivan

    
por 19.09.2015 / 14:11