Tabla de contenido
Nunca entendí por qué las expresiones regulares no se admiten en las fórmulas de Excel. Ahora sí :) Con nuestras funciones personalizadas, puede buscar, reemplazar, extraer y eliminar fácilmente cadenas que coincidan con un patrón específico.
A primera vista, Excel tiene todo lo que se puede necesitar para manipular cadenas de texto. ¿Y las expresiones regulares? No hay funciones Regex integradas en Excel, pero nadie dice que no podamos crear las nuestras :)
¿Qué es una expresión regular?
Una expresión regular (también conocida como regex o regexp ) es una secuencia de caracteres especialmente codificada que define un patrón de búsqueda. Utilizando ese patrón, puede encontrar una combinación de caracteres coincidente en una cadena o validar la entrada de datos. Si está familiarizado con la notación comodín, puede pensar en las expresiones regulares como una versión avanzada de los comodines.
Las expresiones regulares tienen su propia sintaxis, que consta de caracteres especiales, operadores y construcciones. Por ejemplo, [0-5] coincide con cualquier dígito del 0 al 5.
Las expresiones regulares se utilizan en muchos lenguajes de programación, incluyendo JavaScript y VBA. Este último tiene un objeto especial RegExp, que utilizaremos para crear nuestras funciones personalizadas.
¿Admite Excel expresiones regulares?
Para poder utilizar expresiones regulares en sus fórmulas, tendrá que crear su propia función definida por el usuario (basada en VBA o .NET) o instalar herramientas de terceros que admitan expresiones regulares.
Excel Regex hoja de trucos
Tanto si un patrón regex es muy simple como si es extremadamente sofisticado, se construye utilizando la sintaxis común. Este tutorial no pretende enseñarte expresiones regulares. Para ello, existen multitud de recursos en línea, desde tutoriales gratuitos para principiantes hasta cursos premium para usuarios avanzados.
A continuación te ofrecemos una referencia rápida a los principales patrones RegEx que te ayudará a comprender los conceptos básicos. También puede servirte como hoja de trucos cuando estudies otros ejemplos.
Si se siente cómodo con las expresiones regulares, puede saltar directamente a las funciones RegExp.
Personajes
Se trata de los patrones más utilizados para hacer coincidir determinados caracteres.
Patrón | Descripción | Ejemplo | Partidos |
. | Carácter comodín: coincide con cualquier carácter excepto un salto de línea | .ot | punto , caliente , olla , @ot |
\d | Carácter numérico: cualquier dígito del 0 al 9 | \d | En a1b fósforos 1 |
\D | Cualquier carácter que NO sea un dígito | \D | En a1b fósforos a y b |
\s | Carácter de espacio en blanco: espacio, tabulador, nueva línea y retorno de carro. | .\s. | En 3 céntimos fósforos 3 c |
\S | Cualquier carácter que no sea un espacio en blanco | \S+ | En 30 céntimos fósforos 30 y céntimos |
\w | Carácter de la palabra: cualquier letra ASCII, dígito o guión bajo. | \w+ | En 5_gatos*** fósforos 5_gatos |
\W | Cualquier carácter que NO sea alfanumérico ni guión bajo | \W+ | En 5_gatos*** fósforos *** |
\t | Pestaña | ||
\n | Nueva línea | \n\d+ | En la cadena de dos líneas siguiente, coincide con 10 5 gatos 10 perros |
\ | Escapa al significado especial de un carácter, para que puedas buscarlo | \. \w+\. | Escapa un punto para poder encontrar el carácter literal "." en una cadena Sr. , Sra. , Prof. |
Clases de personajes
Utilizando estos patrones, puede hacer coincidir elementos de diferentes conjuntos de caracteres.
Patrón | Descripción | Ejemplo | Partidos |
[personajes] | Coincide con cualquier carácter entre paréntesis | d[oi]g | perro y dig |
[^caracteres] | Coincide con cualquier carácter que NO esté entre corchetes | d[^oi]g | Partidos dag, dug , d1g No coincide perro y dig |
[de-a] | Coincide con cualquier carácter del intervalo entre los corchetes | [0-9] [a-z] [A-Z] | Cualquier dígito del 0 al 9 Cualquier letra minúscula Cualquier letra mayúscula |
Cuantificadores
Los cuantificadores son expresiones especiales que especifican el número de caracteres que deben coincidir. Un cuantificador siempre se aplica al carácter que le precede.
Patrón | Descripción | Ejemplo | Partidos |
* | Cero o más incidencias | 1a* | 1, 1a , 1aa, 1aaa etc. |
+ | Uno o varios sucesos | po+ | En olla fósforos po En pobre fósforos caca |
? | Cero o un suceso | roa?d | carretera, varilla |
*? | Cero o más incidencias, pero las menos posibles | 1a*? | En 1a , 1aa y 1aaa fósforos 1a |
+? | Una o más incidencias, pero las menos posibles | ¿Po+? | En olla y pobre fósforos po |
?? | Cero o una ocurrencia, pero las menos posibles | ¿¿¿??? | En carretera y varilla fósforos ro |
{n} | Coincide con el patrón anterior n veces | \d{3} | Exactamente 3 dígitos |
{n,} | Coincide con el patrón anterior n o más veces | \d{3,} | 3 o más dígitos |
{n,m} | Coincide con el patrón anterior entre n y m veces | \d{3,5} | De 3 a 5 dígitos |
Agrupación
Las construcciones de agrupación se utilizan para capturar una subcadena de la cadena de origen, de modo que pueda realizar alguna operación con ella.
Sintaxis | Descripción | Ejemplo | Partidos |
(patrón) | Grupo de captura: captura una subcadena coincidente y le asigna un número ordinal. | (\d+) | En 5 gatos y 10 perros , capturas 5 (grupo 1) y 10 (grupo 2) |
(?:patrón) | Grupo no captura: coincide con un grupo pero no lo captura | (\d+)(?: perros) | En 5 gatos y 10 perros , capturas 10 |
\1 | Contenido del grupo 1 | (\d+)\+(\d+)=\2\+\1 | Partidos 5+10=10+5 y captura 5 y 10 que están en grupos de captura |
\2 | Contenido del grupo 2 |
Anclas
Las anclas especifican una posición en la cadena de entrada donde buscar una coincidencia.
Ancla | Descripción | Ejemplo | Partidos |
^ | Inicio de la cadena Nota: [^entre paréntesis] significa "no". | ^\d+ | Cualquier número de dígitos al principio de la cadena. En 5 gatos y 10 perros fósforos 5 |
$ | Fin de la cadena | \d+$ | Cualquier número de dígitos al final de la cadena. En 10 más 5 da 15 , partidos 15 |
\b | Límite de la palabra | \bjoy\b | Partidos alegría como palabra independiente, pero no en agradable . |
\B | NO un límite de palabras | \Bjoy\B | Partidos alegría en agradable pero no como palabra independiente. |
Constructo de alternancia (OR)
El operando de alternancia activa la lógica OR, por lo que puede coincidir con este o aquel elemento.
Construir | Descripción | Ejemplo | Partidos |
Coincide con cualquier elemento individual separado por la barra vertical | (s | En vende conchas marinas, coincide con vende y conchas |
Buscar en
Las construcciones Lookaround son útiles cuando se quiere hacer coincidir algo que va o no va seguido o precedido de otra cosa. Estas expresiones se denominan a veces "aserciones de ancho cero" o "coincidencia de ancho cero" porque coinciden con una posición en lugar de con caracteres reales.
Nota: En el formato RegEx de VBA, no se admiten lookbehinds.
Patrón | Descripción | Ejemplo | Partidos |
(?=) | Previsión positiva | X(?=Y) | Coincide con la expresión X cuando va seguida de Y (es decir, si hay Y delante de X) |
(?!) | Previsión negativa | X | Coincide con la expresión X si NO va seguida de Y |
(?<=) | Mirada positiva | (?<=Y)X | Coincide con la expresión X cuando va precedida de Y (es decir, si hay Y detrás de X) |
(? )</td | Mirada negativa | (? Y)X</td | Coincide con la expresión X cuando NO va precedida de Y |
Ahora que conoce lo esencial, pasemos a la parte más interesante: utilizar expresiones regulares en datos reales para analizar cadenas y encontrar la información necesaria. Si necesita más detalles sobre la sintaxis, la guía de Microsoft sobre Lenguaje de Expresiones Regulares puede resultarle útil.
Funciones RegEx personalizadas para Excel
Como ya se ha mencionado, Microsoft Excel no tiene funciones RegEx incorporadas. Para habilitar las expresiones regulares, hemos creado tres funciones VBA personalizadas (también conocidas como funciones definidas por el usuario). Puede copiar los códigos de las páginas enlazadas a continuación o de nuestro libro de ejemplo y, a continuación, pegarlos en sus propios archivos de Excel.
Cómo funcionan las funciones RegExp de VBA
Esta sección explica la mecánica interna y puede ser interesante para quienes quieran saber exactamente qué ocurre en el backend.
Para empezar a utilizar expresiones regulares en VBA, es necesario activar la biblioteca de referencia de objetos RegEx o utilizar la función CreateObject. Para ahorrarle la molestia de establecer la referencia en el editor de VBA, elegimos este último enfoque.
El objeto RegExp tiene 4 propiedades:
- Patrón - es el patrón en la cadena de entrada.
- Global - controla si se buscan todas las coincidencias en la cadena de entrada o sólo la primera. En nuestras funciones, se establece en True para obtener todos los partidos .
- Línea múltiple - determina si el patrón debe coincidir con los saltos de línea en cadenas de varias líneas o sólo en la primera línea. En nuestros códigos, se establece en True para buscar en en cada línea .
- IgnoreCase - define si una expresión regular distingue entre mayúsculas y minúsculas (por defecto) o no (True). En nuestro caso, esto depende de cómo configure el parámetro opcional match_case Por defecto, todas las funciones son distingue entre mayúsculas y minúsculas .
Limitaciones de RegExp en VBA
Excel VBA implementa los patrones regex esenciales, pero carece de muchas funciones avanzadas disponibles en .NET, Perl, Java y otros motores regex. Por ejemplo, VBA RegExp no admite modificadores en línea como (?i) para la coincidencia insensible a mayúsculas y minúsculas o (?m) para el modo multilínea, lookbehinds, clases POSIX, por nombrar algunos.
Función Excel Regex Match
En RegExpMatch busca en una cadena de entrada texto que coincida con una expresión regular y devuelve TRUE si se encuentra una coincidencia, FALSE en caso contrario.
RegExpMatch(texto, patrón, [match_case])Dónde:
- Texto (obligatorio) - una o varias cadenas en las que buscar.
- Patrón (obligatorio) - la expresión regular que debe coincidir.
- Caso_partido (opcional) - tipo de coincidencia. TRUE u omitido - distingue entre mayúsculas y minúsculas; FALSE - no distingue entre mayúsculas y minúsculas.
El código de la función está aquí.
Ejemplo: cómo utilizar expresiones regulares para emparejar cadenas
En el siguiente conjunto de datos, supongamos que desea identificar las entradas que contienen códigos SKU.
Dado que cada SKU comienza con 2 letras mayúsculas, seguidas de un guión, seguidas de 4 dígitos, puede hacerlas coincidir utilizando la siguiente expresión.
Patrón : \b[A-Z]{2}-\d{4}\b
Donde [A-Z]{2} significa 2 letras mayúsculas cualesquiera de la A a la Z y \d{4} significa 4 dígitos cualesquiera de 0 a 9. Un límite de palabra \b indica que una SKU es una palabra independiente y no forma parte de una cadena mayor.
Con el patrón establecido, comience a escribir una fórmula como lo hace normalmente, y el nombre de la función aparecerá en la lista sugerida por Autocompletar de Excel:
Suponiendo que la cadena original está en A5, la fórmula es la siguiente:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Para mayor comodidad, puede introducir la expresión regular en una celda separada y utilizar una referencia absoluta ($A$2) para el campo patrón Esto garantiza que la dirección de la celda no se modifique al copiar la fórmula en otras celdas:
=RegExpMatch(A5, $A$2)
Para mostrar sus propias etiquetas de texto en lugar de TRUE y FALSE, anide RegExpMatch en la función IF y especifique los textos deseados en el campo value_if_true y value_if_false argumentos:
=IF(RegExpMatch(A5, $A$2), "Sí", "No")
Para ver más ejemplos de fórmulas, consulte:
- Cómo hacer coincidir cadenas mediante expresiones regulares
- Validación de datos de Excel con expresiones regulares
Función Excel Regex Extract
En RegExpExtract busca subcadenas que coincidan con una expresión regular y extrae todas las coincidencias o una coincidencia específica.
RegExpExtract(texto, patrón, [instance_num], [match_case])Dónde:
- Texto (obligatorio) - la cadena de texto en la que buscar.
- Patrón (obligatorio) - la expresión regular que debe coincidir.
- Número_de_instancia (opcional) - un número de serie que indica qué instancia extraer. Si se omite, devuelve todas las coincidencias encontradas (por defecto).
- Caso_partido (opcional) - define si se deben igualar (TRUE u omitir) o ignorar (FALSE) las mayúsculas y minúsculas del texto.
Puede obtener el código de la función aquí.
Ejemplo: cómo extraer cadenas utilizando expresiones regulares
Para ello, utilizaremos una expresión regular muy sencilla que coincide con cualquier número de 7 dígitos:
Patrón : \b\d{7}\b
Ponga el patrón en A2 y tendrá el trabajo hecho con esta fórmula compacta y elegante:
=RegExpExtract(A5, $A$2)
Si se encuentra un patrón, la fórmula extrae un número de factura, si no se encuentra ninguna coincidencia - no se devuelve nada.
Para más ejemplos, consulte: Cómo extraer cadenas en Excel utilizando regex.
Función Excel Regex Replace
En RegExpReplace sustituye los valores que coinciden con una expresión regular por el texto que especifique.
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Dónde:
- Texto (obligatorio) - la cadena de texto en la que buscar.
- Patrón (obligatorio) - la expresión regular que debe coincidir.
- Sustitución (obligatorio) - el texto por el que se sustituirán las subcadenas coincidentes.
- Número_de_instancia (opcional) - la instancia a reemplazar. Por defecto es "todas las coincidencias".
- Caso_partido (opcional) - controla si coinciden (TRUE u omitido) o se ignoran (FALSE) las mayúsculas y minúsculas del texto.
El código de la función está disponible aquí.
Ejemplo: cómo sustituir o eliminar cadenas mediante expresiones regulares
Algunos de nuestros registros contienen números de tarjetas de crédito. Esta información es confidencial, y es posible que desee sustituirla por otra o eliminarla por completo. Ambas tareas se pueden realizar con la ayuda de la aplicación RegExpReplace ¿Cómo? En un segundo escenario, sustituiremos por una cadena vacía.
En nuestra tabla de ejemplo, todos los números de tarjeta tienen 16 dígitos, que están escritos en 4 grupos separados por espacios. Para encontrarlos, replicamos el patrón utilizando esta expresión regular:
Patrón : \b\d{4} \d{4} \d{4} \d{4}\b
Para la sustitución, se utiliza la siguiente cadena:
Sustitución : XXXX XXXX XXXX XXXX
Y aquí está la fórmula completa para sustituir números de tarjetas de crédito con información insensible:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX")
Con la expresión regular y el texto de sustitución en celdas separadas (A2 y B2), la fórmula funciona igual de bien:
En Excel, "eliminar" es un caso particular de "sustituir". Para eliminar números de tarjeta de crédito, utilice una cadena vacía ("") para el campo sustitución argumento:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")
Consejo: Para eliminar las líneas vacías en los resultados, puede utilizar otra función RegExpReplace como se muestra en este ejemplo: Cómo eliminar líneas vacías utilizando regex.
Para más información, consulte:
- Cómo reemplazar cadenas en Excel utilizando regex
- Cómo eliminar cadenas mediante regex
- Cómo eliminar los espacios en blanco mediante expresiones regulares
Herramientas Regex para emparejar, extraer, sustituir y eliminar subcadenas
Los usuarios de nuestra Ultimate Suite pueden obtener todo el poder de las expresiones regulares sin insertar una sola línea de código en sus libros de trabajo. Todo el código necesario está escrito por nuestros desarrolladores y se integra suavemente en su Excel durante la instalación.
A diferencia de las funciones VBA comentadas anteriormente, las funciones de Ultimate Suite están basadas en .NET, lo que ofrece dos ventajas principales:
- Puede utilizar expresiones regulares en libros de trabajo .xlsx normales sin añadir ningún código VBA y sin tener que guardarlos como archivos habilitados para macros.
- El motor .NET Regex admite expresiones regulares clásicas con todas las funciones, lo que le permite construir patrones más sofisticados.
Cómo utilizar Regex en Excel
Con Ultimate Suite instalado, utilizar expresiones regulares en Excel es tan sencillo como estos dos pasos:
- En el Datos de Ablebits en la pestaña Texto grupo, haga clic en Herramientas Regex .
- En el Herramientas Regex haga lo siguiente:
- Seleccione los datos de origen.
- Introduzca su patrón regex.
- Elija la opción deseada: Partido , Extracto , Eliminar o Sustituir .
- Para obtener el resultado como fórmula y no como valor, seleccione el botón Insertar como fórmula casilla de verificación.
- Pulsa el botón de acción.
Por ejemplo, para eliminar los números de tarjetas de crédito de las celdas A2:A6, configuramos estos parámetros:
En un tris, se insertará una función AblebitsRegex en una nueva columna a la derecha de tus datos originales. En nuestro caso, la fórmula es:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4}\b")
Una vez que la fórmula está ahí, puedes editarla, copiarla o moverla como cualquier fórmula nativa.
Cómo insertar una fórmula Regex directamente en una celda
Las funciones AblebitsRegex también pueden insertarse directamente en una celda sin utilizar la interfaz del complemento. A continuación se explica cómo hacerlo:
- Haga clic en el botón fx de la barra de fórmulas o Función de inserción en el Fórmulas ficha.
- En el Función de inserción seleccione la opción AblebitsUDFs seleccione la función que le interese y haga clic en Aceptar.
- Define los argumentos de la función como haces normalmente y pulsa OK. ¡Listo!
Para obtener más información, consulte Herramientas Regex para Excel.
Así es como se utilizan las expresiones regulares para emparejar, extraer, reemplazar y eliminar texto en las celdas de Excel. Gracias por leer y ¡espero verte en nuestro blog la semana que viene!
Descargas disponibles
Excel Regex - ejemplos de fórmulas (archivo .xlsm)
Ultimate Suite - versión de prueba (archivo .exe)