Publicado · 10 min de lectura
Regex para no desarrolladores: una guía práctica
Un tutorial de regex amable y con poca jerga para escritores, analistas, marketeros y cualquiera que viva en Buscar y reemplazar. Aprende la sintaxis que importa y llévate diez recetas listas para usar.
Por qué a un no desarrollador le importa regex
Si alguna vez has abierto el cuadro de Buscar y reemplazar en Word, Google Docs, Notion, una hoja de cálculo o tu editor de texto favorito y has pensado "tiene que haber una forma más rápida de hacer esto", eres exactamente el lector adecuado para esta guía. Regex, abreviatura de expresión regular, es un pequeño lenguaje de patrones que convierte Buscar y reemplazar de un instrumento romo en un bisturí. En lugar de buscar una palabra fija única, describes la forma de lo que buscas: "cualquier número de teléfono", "cada línea que empieza con una fecha", "todas las direcciones de email en este export desordenado".
Regex tiene fama de ser intimidante, sobre todo porque los tutoriales escritos para programadores te lanzan veinte símbolos en el primer párrafo. La verdad es que puedes ser tremendamente productivo con unos diez caracteres y un puñado de patrones. Este artículo te lleva por ese núcleo y luego te entrega diez recetas listas para copiar y pegar en el cuadro de Buscar y reemplazar de casi cualquier app moderna hoy mismo.
Una nota rápida sobre dónde funciona regex: está soportado en Microsoft Word (con "Usar caracteres comodín" o vía la nueva búsqueda regex), Google Docs ("Coincidir usando expresiones regulares"), Notion (limitado), VS Code, Sublime Text, BBEdit, Obsidian, Google Sheets a través de REGEXMATCH y REGEXREPLACE, Excel vía Power Query y las nuevas funciones REGEX, y prácticamente cualquier editor de código y herramienta de prueba en línea. Algunas apps usan dialectos ligeramente distintos, pero el noventa por ciento de lo que aprendas aquí funciona en todas partes.
¿Qué es exactamente una regex?
Una expresión regular es un patrón. Le entregas el patrón a un motor de búsqueda y este te devuelve cada trozo de texto que coincida con ese patrón. La regex más simple posible es una palabra literal. El patrón cat encuentra las letras c, a, t en ese orden. Hasta aquí, aburrido, eso es solo un Buscar y reemplazar normal.
La magia empieza cuando incorporas caracteres especiales llamados metacaracteres. Estos no se representan a sí mismos; describen categorías o reglas. Un punto, por ejemplo, significa "cualquier carácter individual". El patrón c.t ahora coincide con cat, cot, cut, c5t e incluso c#t. De repente un patrón hace el trabajo de docenas de búsquedas.
Ese es todo el modelo mental. Una regex es una cadena literal de texto donde algunos caracteres se han ascendido para significar algo más general. Aprende lo que hacen esos caracteres ascendidos y podrás leer y escribir casi cualquier patrón que te encuentres.
Los bloques de construcción que conviene memorizar
- . (punto) coincide con cualquier carácter individual excepto un salto de línea.
- * significa "cero o más de la cosa anterior". Así que a* coincide con una cadena vacía, a, aa, aaa y así sucesivamente.
- + significa "uno o más de la cosa anterior". a+ coincide con a, aa, aaa, pero no con una cadena vacía.
- ? significa "cero o uno", es decir, opcional. colou?r coincide tanto con color como con colour.
- ^ ancla el patrón al inicio de una línea. ^Hello encuentra Hello solo cuando empieza una línea.
- $ ancla al final de una línea. \.$ encuentra cada línea que termina con un punto.
- [abc] es una clase de caracteres. Coincide con un carácter que sea a, b o c. [a-z] coincide con cualquier letra minúscula, [0-9] con cualquier dígito, [A-Za-z0-9] con cualquier letra o dígito.
- [^abc] con un acento circunflejo dentro de los corchetes significa "cualquier carácter excepto a, b o c".
- \d es la abreviatura de cualquier dígito, \w de cualquier carácter de palabra (letras, dígitos, guion bajo), \s de cualquier espacio en blanco (espacio, tabulador, salto de línea). Sus contrapartes en mayúscula \D, \W, \S significan lo opuesto.
- Los paréntesis ( ) crean un grupo, tanto para aplicar cuantificadores a varios caracteres a la vez como para capturar texto que quieras reutilizar en un reemplazo.
- La barra vertical | significa O. cat|dog coincide con cat o dog.
- Una barra invertida \ escapa un carácter especial para que coincida literalmente. Para encontrar un punto real, escribe \. Para encontrar un paréntesis literal, escribe \(.
Anclas, cuantificadores y la trampa codiciosa
Las anclas (^ y $) son el secreto para escribir patrones precisos. Sin ellas, tu regex flota por cualquier parte del texto y tiende a coincidir con más de lo que querías. Con ellas, anclas el patrón al inicio o al final de una línea, que es normalmente lo que quieres decir cuando dices "cada línea que empieza por un número".
Los cuantificadores (*, +, ? y la forma con llaves como {2,4}) controlan cuántas veces se repite la cosa anterior. Lo importante es que son codiciosos por defecto: agarran tanto como pueden. Si escribes <.+> y lo ejecutas sobre el texto <b>hi</b>, podrías esperar que coincidiera con <b> y </b> por separado. En realidad coincidirá con todo <b>hi</b> de una sola vez porque + es codicioso. Añade un signo de interrogación, <.+?>, y el cuantificador se vuelve perezoso, coincidiendo con lo menos posible. Este único truco ahorra una enorme cantidad de tiempo de depuración.
Grupos y referencias hacia atrás para buscar y reemplazar
Los paréntesis cumplen doble función. Primero, te permiten cuantificar un trozo: (ab)+ coincide con ab, abab, ababab. Segundo, y mucho más útil, capturan lo que coincida en una ranura numerada a la que puedes referirte en el campo de reemplazo. El primer conjunto de paréntesis se convierte en $1 en la mayoría de los editores (o \1 en algunos), el segundo en $2, y así sucesivamente.
Así es como reordenas texto. Supón que tu hoja de cálculo tiene los nombres escritos como Apellido, Nombre y quieres Nombre Apellido. Busca ([A-Za-z]+), ([A-Za-z]+) y reemplaza con $2 $1. Listo, en una sola pasada, a través de miles de filas. Casi todas las recetas posteriores de este artículo usan el mismo truco, así que vale la pena familiarizarse con la idea: paréntesis a la izquierda, dólar-números a la derecha.
Receta 1: extraer todas las direcciones de email de un texto desordenado
Las direcciones de email son ubicuas en exports, bloques de firma y volcados de CRM. Este patrón es un valor por defecto sensato. No es perfecto según RFC (ningún regex realmente lo es), pero captura cada dirección realista en documentos normales.
[\w.+-]+@[\w-]+\.[\w.-]+Receta 2: encontrar números de teléfono en cualquier formato común
Los números de teléfono son un ejemplo maravilloso de cómo regex doma la entrada desordenada. El patrón siguiente captura números escritos como 555-123-4567, (555) 123 4567, +1 555.123.4567 y la mayoría de las variantes intermedias. Ajusta el + y el código de país iniciales si solo necesitas números locales.
\+?\d{1,3}?[\s.-]?\(?\d{2,4}\)?[\s.-]?\d{3,4}[\s.-]?\d{3,4}Receta 3: cambiar el formato de fecha de YYYY-MM-DD a DD/MM/YYYY
Esta es la jugada clásica de grupos y referencias hacia atrás. Captura cada parte de la fecha y luego reordénalas en el campo de reemplazo. En la caja de Buscar pega el patrón de abajo; en la caja de Reemplazar pega $3/$2/$1.
(\d{4})-(\d{2})-(\d{2})Receta 4: eliminar todas las líneas en blanco de un documento
El texto largo pegado a menudo viene con líneas vacías extra que duplican o triplican el número de páginas. El patrón de abajo coincide con una línea que no contiene nada más que espacio en blanco opcional y un salto de línea. Reemplaza con nada (deja el cuadro de Reemplazar vacío) y tu documento se contrae a líneas a espaciado simple.
^\s*\nReceta 5: contraer espacios dobles, triples o desbordados en uno
Los exports de OCR, los PDF copiados y los documentos antiguos de Word son notorios por salpicar dobles espacios entre palabras. Encuentra dos o más espacios consecutivos y reemplaza por un único espacio.
{2,}Receta 6: extraer todas las URL de un bloque de texto
¿Necesitas tomar todos los enlaces de un artículo, un export de correo o un registro de chat? Este patrón captura URL http y https, incluyendo rutas y cadenas de consulta. Combínalo con la función "copiar todas las coincidencias" de tu editor, o pega las coincidencias capturadas en un documento nuevo.
https?://[\w.-]+(?:/[\w./?=&%#-]*)?Receta 7: poner en mayúscula la primera letra de cada nombre en una lista
Si tienes una columna llena de nombres escritos en minúsculas (jane doe, mark twain) puedes arreglar la capitalización en dos pasadas. Primero, encuentra el patrón de abajo y captura la primera letra de cada palabra. La mayoría de los editores te permiten reemplazar con \u$1 (poner en mayúscula la primera captura). Si el tuyo no lo hace, pasa la lista por un conversor de mayúsculas/minúsculas dedicado y vuelve. Multilities ofrece un pequeño conversor de mayúsculas/minúsculas que maneja esto en un clic.
\b([a-z])Receta 8: conservar solo las líneas que contengan un número
Algunos editores te permiten eliminar todas las líneas que no coincidan con una regex. Combinado con el patrón de abajo, puedes reducir un archivo de log largo o un documento de notas a solo las filas que contienen un número, lo cual es maravilloso para limpiar extractos bancarios pegados desde un PDF.
^.*\d+.*$Receta 9: estandarizar los espacios al final de cada línea
Los espacios finales son invisibles, pero rompen herramientas de diff, firmas de correo y comentarios de código. Encuéntralos y reemplaza con nada. El patrón coincide con uno o más espacios o tabuladores que están justo antes del final de una línea.
[ \t]+$Receta 10: extraer hashtags de un export de redes sociales
Los equipos de marketing exportan tuits, posts de LinkedIn y subtítulos de Instagram y quieren contar qué hashtags aparecieron. El patrón de abajo encuentra un # seguido inmediatamente de uno o más caracteres de palabra, lo que captura cada hashtag realista sin arrastrar la puntuación circundante.
#\w+Cómo probar todo esto en tu herramienta
En Google Docs, abre Editar, luego Buscar y reemplazar, y marca "Coincidir usando expresiones regulares". En Microsoft Word, abre el diálogo de Buscar y reemplazar, expándelo y marca "Usar caracteres comodín" (el dialecto de comodines de Word es similar pero no idéntico, así que los patrones de arriba pueden necesitar un retoque allí). En Notion, regex está soportado en algunas propiedades de base de datos y vía integraciones, pero la barra de búsqueda en sí es literal.
En Google Sheets, envuelve el patrón en REGEXMATCH, REGEXEXTRACT o REGEXREPLACE: =REGEXEXTRACT(A2, "[\w.+-]+@[\w-]+\.[\w.-]+") extrae el email de la celda A2. Las nuevas funciones REGEXEXTRACT, REGEXREPLACE y REGEXTEST de Excel se comportan de forma similar. En VS Code, Sublime y la mayoría de los editores de código, haz clic en el icono .* en la barra de búsqueda para cambiar la búsqueda al modo regex.
Cuando un patrón se porte mal, no te quedes mirándolo. Métele en un probador de regex que resalte las coincidencias mientras escribes. Multilities ofrece un /tools/regex-tester gratuito justo para esto, y una herramienta /tools/find-replace que ejecuta tus patrones sobre un bloque de texto pegado sin tocar el documento original. Iterar en un probador lleva segundos; iterar dentro de Word con Deshacer lleva minutos.
Errores comunes y cómo evitarlos
- Olvidar escapar el punto. Si quieres un punto literal (en un nombre de dominio, una extensión de archivo o una frase), escribe \. El punto desnudo coincide con cualquier cosa.
- Usar .* cuando quieres decir \S+ o [^,]+. El patrón punto-asterisco es codicioso y a menudo come más de lo que querías, especialmente a través de comas, comillas o etiquetas HTML.
- Anclar con ^ y $ pero olvidar que ^ y $ funcionan por línea en algunas herramientas y por documento en otras. Si obtienes coincidencias inesperadas, comprueba si tu editor tiene un interruptor "multilínea" o "dotall".
- Mezclar dialectos. JavaScript, Python, PCRE, comodines de Word y regex POSIX comparten la mayor parte de la sintaxis, pero difieren en casos límite como las búsquedas hacia delante/atrás y los grupos con nombre. Cuando algo deja de funcionar en una app, el dialecto suele ser la causa.
- No usar paréntesis para el reemplazo. Si quieres conservar parte de lo que coincidiste, tienes que capturarlo. Sin paréntesis no puedes referenciar nada con $1 o \1.
Un flujo corto que te hará rápido
Cuando necesites limpiar un documento, no empieces escribiendo la regex perfecta. Empieza seleccionando dos o tres filas de ejemplo del texto desordenado y pegándolas en un probador de regex. Escribe una versión literal de un ejemplo, y luego mejora un trozo a la vez: reemplaza los dígitos por \d+, reemplaza el nombre de variable por \w+, reemplaza la puntuación que puede variar por una clase de caracteres. Tras cada mejora, comprueba que el texto de prueba sigue coincidiendo y que no has empezado a capturar cosas que no querías.
Una vez que el patrón sea correcto, cópialo en la caja de Buscar del documento real y ejecuta un único reemplazo para ver si se comporta de la misma manera a escala. Si el documento es importante, trabaja sobre una copia y usa Deshacer agresivamente. En una semana de hacer esto dos o tres veces empezarás a escribir patrones de memoria para las limpiezas que haces más a menudo, y lo primero a lo que recurras en cualquier export desordenado ya no será un clic-clic-clic manual sino un pequeño patrón que lo hace todo de una vez.
A dónde ir desde aquí
Los patrones y recetas de arriba cubrirán la gran mayoría de las tareas cotidianas de limpieza, extracción y reformateo de texto. Cuando estés listo para profundizar más, busca lookaheads ((?=...)), lookbehinds ((?<=...)), grupos no captadores ((?:...)) y capturas con nombre ((?<year>\d{4})). No son necesarios para el trabajo diario, pero desbloquean patrones más elegantes cuando te encuentres con texto genuinamente espinoso.
Regex recompensa la práctica corta y frecuente más que cualquier otra habilidad técnica. Mantén un archivo de notas con las cinco recetas que más uses, pega las nuevas a medida que las descubras, y en pocos meses serás la persona de la oficina a la que todo el mundo pregunta cuando su hoja de cálculo es un desastre. Es un sitio sorprendentemente agradable donde estar.