Como construir um achado / substituição regex na palavra 2010

1

Eu tenho uma experiência limitada com o JavaScript básico regex, que usei para manipular algumas entradas de dados do usuário. Mas agora, me perguntaram sobre a manipulação de documentos do MS Word 2010.

Especificamente, meus usuários recebem uma longa lista numérica de dados, como tal:

1. blah blah 'car' blah blah
2. blah blah 'truck' blah blah
3. blah blah 'boat' blah blah

Isso está em um documento de texto simples e não formatado. Eles gostariam de um cabeçalho formatado após cada numeral, com base no item entre aspas simples, ala:

1. CAR: blah blah 'car' blah blah
2. TRUCK: blah blah 'truck' blah blah
3. BOAT: blah blah 'boat' blah blah

eles atualmente têm transcriptionists que fazem manualmente essas alterações (às vezes com erros). Com o javascript / jQuery, eu poderia escrever algum código para pegar esses dados, procurar palavras entre aspas, encontrar o número mais próximo antes da partida e inserir uma versão do CAPS dele depois do período.

Mas não tenho muita experiência com funções semelhantes no Word. Isso pode ser feito através de uma macro ou algum tipo de script? É possível escrever meu código javascript / jQuery e executá-lo em uma instância do Word de alguma forma?

Obrigado pela orientação!

    
por user1837608 15.05.2015 / 18:13

3 respostas

2

Sim! O Microsoft Office VBA oferece suporte a expressões regulares que pesquisam nativamente. Você precisa adicionar "Microsoft VBScript Regular Expressions 5.5" como uma referência no VBA Editor para cada arquivo .docm , .xlsm , etc. no qual você deseja colocar o código Regex:

AmaiorpartedomodelodeobjetoparaestemódulodeexpressãoregularpodeserencontradanoMSDN aqui . Uma coisa que parece estar faltando é a configuração MultiLine .

Você usa da seguinte forma:

  • Instancie um novo objeto regex com Dim rx as New RegExp
  • Defina as sinalizações rx.Global , rx.MultiLine e rx.IgnoreCase conforme desejado
  • Defina o padrão atribuindo a sequência de padrões apropriada a rx.Pattern
  • Se você quiser saber se algo corresponde à regex, use rx.Test(str) , que retorna True ou False apropriadamente
  • Chamar rx.Execute(str) retorna um objeto MatchCollection , que se comporta como uma matriz unidimensional baseada em zero de zero ou mais Match objects
  • Match objetos expõem as propriedades FirstIndex , Length , Value e SubMatches .
    • FirstIndex é o índice baseado em zero do primeiro caractere do local em str no qual a correspondência foi encontrada
    • Length é o tamanho da porção correspondida de str
    • Value é o resultado da string correspondida
    • SubMatches é uma matriz baseada em zero dos grupos sub-selecionados dentro da correspondência geral
      • Infelizmente, o regex do VBA do Office não oferece suporte a grupos nomeados como, por exemplo, Python, por isso pode ser necessário usar uma tentativa e erro para corresponder ao índice do grupo com a parte do padrão em que você está interessado

Eu não acredito que haja uma maneira de fazer uma operação substitua no local com sed - é uma funcionalidade somente de pesquisa. Mas, é fácil usar o VBA ao redor para manipular os resultados como você deseja.

    
por 15.05.2015 / 19:18
0

Se é apenas texto plano no documento do Word e não é muito grande e você está familiarizado com o jquery, você pode criar um site simples onde eles possam copiar / colar o documento do Word e fazer as alterações necessárias e deixá-los fazer o download o documento da palavra transformada ou a saída do texto desejado. Depende realmente de mais detalhes da sua situação para dizer se esta é uma boa solução.

A macro provavelmente também pode ser executada, mas pode ser difícil implantá-la para os usuários, dependendo de quantos usuários você teve.

    
por 15.05.2015 / 18:55
0

Caso você não seja habilidoso em scripts VBA ou Python e @ hBy2Py answer idea not fit your competence, tente soluções alternativas com o GoogleSheets / Excel implementando seu algoritmo:

  1. upload = importe documento sem formatação, plain word = txt para G'Sheet. Vamos dizer que sua lista estará na coluna A.
  2. na coluna B escrever a fórmula aninhada para todas as colunas usando REGEXEXTRACT para palavra entre aspas e tornando essa palavra maiúscula =ARRAYFORMULA(UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)")))
  3. ... ou crie uma coluna separada C para tornar essa palavra maiúscula: =UPPER(B:B)
  4. na coluna C (ou D) combina nova lista com a palavra CAPS (há várias maneiras de fazer isso, por exemplo, dividindo / concatenando ou apenas =ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&B:B&": "))

TLDR:

=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)"))&": "))

Outra solução alternativa poderia estar usando a solução descrita aqui: Localizar e substituir em Notepad ++ usando curingas / regex

    
por 06.09.2017 / 16:36