Existe uma maneira de procurar um padrão em um documento do MS Word?

30

Existe uma maneira de procurar padrões dentro de um documento do MS Word em vez de uma correspondência exata?

Eu tenho um documento onde todos os decimais foram escritos como em /vez de .. Por exemplo, 1.02foi escrito como 1/02, porque a tipografia persa usa em /vez de .para o ponto decimal.

Como /não é usado apenas para decimais, e possui outras aplicações, por exemplo, frações, porcentagem etc., existe uma maneira de encontrar um padrão como N/Mem um documento do word, onde Ndenota um decimal e Mtambém mostra outro número decimal?

codezombie
fonte
2
Como isso não é duplicado mais de 5 anos após o lançamento do Superusuário?
Peter Mortensen
1
Um ponto de partida pode ser Expressão Regular para Localizar e Substituir no Microsoft Word .
Peter Mortensen
Bem, seria difícil movê-lo para o bloco de notas se houvesse outro texto no meio, vamos supor que alguém esteja escrevendo um artigo de jornal (por favor, use látex) para que eles não possam movê-lo para fora da palavra, ou algo dessa natureza, eles perderia todas as outras formatações.
Charm_quark
1
Acabei de verificar: as versões mais recentes do MS Word armazenam documentos do Word (* .docx) como documentos baseados em XML compactados. Depois de saber como essa estrutura funciona, descompacte o arquivo * .docx e faça uma correspondência de padrão nas estruturas de arquivos XML resultantes.
Dominique
@ Dominique que é interessante. Não sabia que
codezombie

Respostas:

12

como 'N / M' em um documento do Word, em que N indica um decimal e M também mostra outro número decimal

Apenas para uma pesquisa, você pode usar ^#/^#como seu parâmetro de pesquisa. Nas opções mais , e encontre Especial , existem outras opções que podem ser úteis.

Nb:, ^#é uma casa decimal, portanto, se você estiver procurando especificamente por x / aa, seria ^#/^#^#etc.

para substituir,

Essa é uma opção melhor, faça a pesquisa ([0-9])/([0-9])e substitua por \1.\2e ative "usar curingas"

Charm_quark
fonte
Obrigado. isso encontra os hits. mas o Word não aceita ^ #. ^ # para a peça de substituição. Quero deixar os dígitos que cercam '/' intactos e substituir '/' por '.'.
Codezombie #
1
tente fazer uma pesquisa com isso, "([0-9]) / ([0-9])" e substitua por "\ 1. \ 2", faça as aspas duplas. e habilitar "usar curingas"
Charm_quark 30/11
37

Palavra

Use a implementação de expressões regulares da Microsoft

Pressione CTRL+ H»clique em Mais » Habilitar Usar Curingas

  • Encontre o que: ([0-9]{1,2})/([0-9]{2})
  • Substituir com: \1.\2

insira a descrição da imagem aqui insira a descrição da imagem aqui

Parece um padrão de pesquisa maluco, então vamos examiná-lo:

  • [0-9] significa um único valor numérico (0,1,2,3,4,5,6,7,8 e 9)
  • {1,2}é usado para contar ocorrências do caractere ou expressão anterior. No nosso caso, isso significa: Pesquise apenas um ou dois números .

    Cuidado: se você estiver usando uma palavra em alemão, precisará usar ;como separador em vez de,

  • /não tem significado especial. Ele literalmente pesquisa uma barra
  • ()os colchetes são importantes. Eles dividem o padrão em seqüências lógicas para que possamos usar mais tarde \1, \2... \nem nosso padrão de substituição. Dessa forma, preservamos valores

Leia mais na seção As expressões Peça por peça no artigo de suporte da Microsoft ou no site do Word de Graham Mayor


VBA (melhor solução)

Sugiro que você use um método VBA que adira mais ao padrão de outros mecanismos RegEx. Eles estão melhor documentados e mais pessoas podem ajudá-lo.

Essa macro solicita um padrão RegEx para pesquisar em todo o documento e substituí-lo pela sua sequência especificada.

Pressione ALT+ F11para abrir o editor VBA. Cole o código em qualquer lugar e execute-o comF5

Sub RegexReplace()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")    
    On Error Resume Next

    RegEx.Global = True
    RegEx.Pattern = InputBox("Find what:")
    ActiveDocument.Range = _ 
        RegEx.Replace(ActiveDocument.Range, InputBox("Replace with:"))        

End Sub
  • Encontre o que: (?!\d)/(?=\d)
  • Substituir com: .

insira a descrição da imagem aquiinsira a descrição da imagem aqui

nixda
fonte