Cómo usar la expresión regular en Microsoft Word - Consejos de Excel

Lissa pregunta:

¿Hay alguna forma de cambiar un número (siempre un número aleatorio) después de la palabra zorro? Ejemplo: zorro 23, oso 1, zorro 398, rana 12, zorro 15. Quiero cambiar el número al mismo color de la palabra zorro.

Podemos buscar y reemplazar por formato en Microsoft Word. Esta es una gran característica para encontrar rápidamente el texto formateado e incluso reemplazar el formato de texto completo en el documento.

Seleccione Búsqueda avanzada en la cinta.

Cuadro de diálogo Buscar y reemplazar

Ingrese el texto para buscar, luego haga clic en el botón Más para ver las opciones avanzadas y haga clic en el botón Formato.

Opciones de búsqueda avanzada

Seleccione la opción Fuente en la configuración, luego puede configurar el color del texto que le gustaría encontrar en el documento. Haga clic en Aceptar para cerrar la ventana de diálogo Buscar fuente.

Seleccione el color del texto en el cuadro de diálogo Buscar fuente.

Haga clic en Buscar siguiente y verá que se seleccionará la primera aparición del texto que se busca en cierto color.

Buscar siguiente para encontrar la primera aparición.

También podemos realizar búsquedas más complicadas utilizando comodines. Sin embargo, el módulo de búsqueda nativo de Word no nos permite hacer una búsqueda como pidió Lissa.

¡Ahí es donde podemos incluir RegEx en el juego!

Biblioteca de expresiones regulares VBSCript

VBA no se envía con ningún soporte de expresión regular. Sin embargo, la biblioteca de Microsoft VBScript contiene poderosas capacidades de expresión regular. Esta biblioteca es parte de Internet Explorer 5.5 y posterior, por lo que está disponible en todas las computadoras que ejecutan Windows XP, Vista, 7, 8, 8.1 o 10.

Usuarios de Mac

Dado que Internet Explorer no es una aplicación de Mac, esta biblioteca no existe en Mac. Por lo tanto, los ejemplos de VBA a continuación no funcionan en Mac.

Para usar esta biblioteca en VBA, cambie a VBE, seleccione Proyecto y referencias en el menú VBE, luego desplácese hacia abajo en la lista para encontrar el elemento "Microsoft VBScript Regular Expressions 5.5" y márquelo para incluirlo en la aplicación.

Biblioteca de expresiones regulares de VBScript

Inserte un nuevo módulo y copie y pegue el siguiente código en este 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 procedimiento toma el texto de muestra, encuentra los códigos de producto según el patrón dado, que comienza con "zorro", espacio simple y un número, e imprime los códigos coincidentes en la ventana Inmediato (presione Ctrl + G en VBE si no es así ya visible).

Códigos de producto coincidentes impresos en la ventana Inmediato.

d+ la clase de carácter en el patrón define uno o más caracteres numéricos, y el patrón es básicamente el prefijo "zorro" seguido de un espacio seguido de números.

Más información

Visite Lenguaje de expresiones regulares - Referencia rápida para obtener más información sobre escapes de personajes, clases de personajes y anclajes.

Copie y pegue el siguiente código para ver RegEx en acción para eliminar los espacios de los códigos de producto.

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 procedimiento reemplaza el contenido del texto de muestra eliminando los espacios de los códigos de producto que coinciden con el patrón dado e imprime el texto del resultado en la ventana Inmediato.

Texto reemplazado impreso en la ventana Inmediato.

Tenga en cuenta que el patrón es ligeramente diferente al primer código. Los términos de este patrón se incluyen entre paréntesis y los términos correspondientes se utilizan en el método Reemplazar como $ 1 y $ 2 en orden. Este procedimiento simplemente une los dos términos sin espacios.

De vuelta a la pregunta

Volvamos al texto de muestra que usamos al principio de este artículo.

Texto de ejemplo

Necesitamos encontrar "zorro" seguido de caracteres numéricos, y cambiar la coincidencia usando el color de la sección "zorro" en el texto coincidente.

Aunque la expresión regular coincide muy bien con el patrón dado, no puede reemplazar el color del texto en un documento de Word. Por lo tanto, combinaremos los métodos RegEx y Word VBA en el siguiente procedimiento.

Estos son los pasos:

  1. Encuentre las coincidencias con RegEx.
  2. Busque cada texto coincidente mediante el método de búsqueda de palabras.
  3. Encuentra el color de la primera palabra en el rango encontrado.
  4. Cambie el color del rango encontrado con el color del paso anterior.

Cambie a VBE e inserte un nuevo módulo. Asegúrese de que la biblioteca VBScript Regular Expressions esté agregada al proyecto y copie y pegue el siguiente código en este nuevo 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 

Ejecute el código y aquí está el resultado.

Resultado

Descargar archivo de Word

Para descargar el archivo de Word: cómo-usar-regex-en-microsoft-word.docm

¿RegEx en Excel?

Regex falta por completo en Excel. Sin embargo, todavía podemos usar Expresiones regulares de VBScript en 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

Articulos interesantes...