Cómo construir una expresión regular buscar/reemplazar en Word 2010

Cómo construir una expresión regular buscar/reemplazar en Word 2010

Tengo cierta experiencia limitada con expresiones regulares básicas de JavaScript, que he usado para manipular algunas entradas de datos del usuario. Pero ahora me han preguntado sobre la manipulación de documentos de MS Word 2010.

Específicamente, mis usuarios obtienen una larga lista numérica de datos como tal:

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

Esto está en un documento de Word simple y sin formato. Les gustaría un encabezado formateado después de cada número, basado en el elemento entre comillas simples, ala:

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

Actualmente cuentan con transcriptores que realizan estos cambios manualmente (a veces con errores). Con javascript/jQuery, podría escribir código para tomar estos datos, buscar palabras entre comillas, encontrar el número más cercano antes de la coincidencia e insertar una versión en MAYÚSCULAS después del punto.

Pero no tengo mucha experiencia con funciones similares en Word. ¿Se puede hacer esto mediante una macro o algún tipo de secuencia de comandos? ¿Es posible escribir mi código javascript/jQuery y ejecutarlo en una instancia de Word de alguna manera?

¡Gracias por la orientación!

Respuesta1

¡Sí! Microsoft Office VBA admite la búsqueda de expresiones regulares de forma nativa. Debe agregar "Expresiones regulares de Microsoft VBScript 5.5" como referencia en el Editor VBA para cada archivo .docm, .xlsmetc. en el que desee colocar el código Regex:

recorte de VBA

La mayor parte del modelo de objetos para este módulo de expresiones regulares se puede encontrar en MSDNaquí. Una cosa que parece faltar es la MultiLineconfiguración.

Lo usas de la siguiente manera:

  • Crear una instancia de un nuevo objeto regex conDim rx as New RegExp
  • Configure las banderas rx.Global, rx.MultiLiney rx.IgnoreCasecomo desee
  • Defina el patrón asignando la cadena de patrón adecuada arx.Pattern
  • Si desea saber si algo coincide con la expresión regular, use rx.Test(str), que devuelve Trueo Falseapropiadamente
  • La llamada rx.Execute(str)devuelve un MatchCollectionobjeto, que se comporta como una matriz unidimensional de base cero de cero o más Matchobjetos.
  • MatchLos objetos exponen las propiedades FirstIndex, Length, Valuey SubMatches.
    • FirstIndexes el índice de base cero del primer carácter de la ubicación en strla que se encontró la coincidencia
    • Lengthes la longitud de la porción coincidente destr
    • Valuees el resultado de la cadena coincidente
    • SubMatcheses una matriz de base cero degrupos subemparejadosdentro del partido general
      • Desafortunadamente, la expresión regular de Office VBA no admite grupos con nombre como, por ejemplo, Python, por lo que puede ser necesario un poco de prueba y error para hacer coincidir el índice del grupo con la parte del patrón que le interesa.

No creo que haya una manera de realizar una sedoperación de reemplazo en el lugar de estilo: es una funcionalidad de solo búsqueda. Pero es bastante fácil usar VBA circundante para manipular los resultados como desee.

Respuesta2

Si es solo texto sin formato en el documento de Word y no es muy grande y está familiarizado con jquery, puede crear un sitio simple donde puedan copiar/pegar el documento de Word y usted haga los cambios necesarios y les permita descargar el Word transformado. documentar o generar el texto deseado. Realmente depende de más detalles de su situación para decir si esta es una buena solución.

La macro probablemente también se podría hacer, pero podría ser difícil implementarla para los usuarios dependiendo de cuántos usuarios tuviera.

Respuesta3

En caso de que no sea un experto en secuencias de comandos VBA o Python y la idea de respuesta de @hBy2Py no se ajuste a sus competencias, pruebe una solución alternativa con GoogleSheets/Excel implementando su algoritmo:

  1. upload=importar documento word=txt sin formato y sin formato a G'Sheet. Digamos que su lista estará en la columna A.
  2. en la columna B escriba la fórmula anidada para todas las columnas usando REGEXEXTRACT para la palabra entre comillas y poniendo esa palabra en mayúscula=ARRAYFORMULA(UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)")))
  3. ...o haga una columna separada C y ponga esa palabra en mayúscula:=UPPER(B:B)
  4. en la columna C (o D) combine la nueva lista con la palabra MAYÚSCULAS (hay varias formas de hacerlo, por ejemplo, dividiendo/concatenando o simplemente=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&B:B&": "))

TLDR:

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

Otra solución alternativa podría ser utilizar la solución que se describe aquí:Buscar y reemplazar en Notepad++ usando comodines/regex

información relacionada