Programación

Expresiones regulares: buscar patrones en texto

La sintaxis básica de las regex con ejemplos para buscar, validar y extraer datos de un texto.

Una expresión regular (regex) es un patrón que describe un tipo de texto: «tres letras seguidas de cuatro números», «cualquier cosa que parezca una fecha», «líneas que empiezan por ERROR». Sirven para buscar, validar, extraer y reemplazar texto, y funcionan casi igual en JavaScript, Python, Java, editores como VS Code y herramientas de terminal. Puedes probar todos los ejemplos de esta guía en nuestro probador de expresiones regulares, que marca las coincidencias en tu navegador.

Los símbolos básicos de las expresiones regulares.Símbolo: .; \d; \s; [abc]; ^ y $. Significa: Cualquier carácter; Un dígito; Un espacio; Uno de esos caracteres; Inicio y finalSímbolo.\d\s[abc]^ y $SignificaCualquier carácterUn dígitoUn espacioUno de esos caracteresInicio y final
Los símbolos básicos de las expresiones regulares.

Los símbolos básicos

Símbolo Significa Ejemplo
. Cualquier carácter (salvo salto de línea) c.sa → casa, cosa
\d Un dígito \d\d → 42
\w Letra, dígito o guion bajo (sin ñ ni tildes en muchos lenguajes) \w+ → hola_1
\s Espacio, tabulador o salto de línea a\sb → «a b»
[abc] Uno de esos caracteres [aeiou] → una vocal
[^abc] Cualquiera menos esos [^0-9] → no dígito
^ y $ Inicio y final del texto (o de la línea) ^Hola
\ Escapa un símbolo especial \. → un punto de verdad
Pantalla llena de código vista en ángulo
Foto: Markus Spiske · dominio público (CC0) · vía StockSnap

Cuantificadores: cuántas veces

Cuantificador Significa
* 0 o más veces
+ 1 o más veces
? 0 o 1 vez (opcional)
{3} Exactamente 3 veces
{2,5} Entre 2 y 5 veces

Por defecto son codiciosos: cogen todo lo que pueden. Con <.+> sobre <b>hola</b> obtienes el texto entero, no solo <b>. Añadir ? los vuelve perezosos: <.+?> se detiene en el primer >.

Grupos y alternativas

  • ( … ) agrupa y captura lo que coincide, para extraerlo después.
  • | significa «o»: gato|perro.
  • (?: … ) agrupa sin capturar.

Por ejemplo, (\d{2})/(\d{2})/(\d{4}) encuentra fechas como 25/10/2026 y captura día, mes y año por separado.

Los cuantificadores dicen cuántas veces.Cuantificador: *; sí, ; ?; {3}; {2,5}. Veces: 0 o más; 1 o más; 0 o 1; Exactamente 3; Entre 2 y 5Cuantificador*?{3}{2,5}Veces0 o más1 o más0 o 1Exactamente 3Entre 2 y 5
Los cuantificadores dicen cuántas veces.

Ejemplos en JavaScript y Python

Extraer todas las fechas de un texto:

const texto = "Examen el 12/11/2026 y entrega el 03/12/2026";
const fechas = [...texto.matchAll(/(\d{2})\/(\d{2})\/(\d{4})/g)];
for (const [completa, dia, mes, anio] of fechas) {
  console.log(completa, "→ año", anio);
}
import re

texto = "Examen el 12/11/2026 y entrega el 03/12/2026"
for dia, mes, anio in re.findall(r"(\d{2})/(\d{2})/(\d{4})", texto):
    print(dia, mes, anio)

# Reemplazar: pasar a formato año-mes-día
print(re.sub(r"(\d{2})/(\d{2})/(\d{4})", r"\3-\2-\1", texto))

En Python escribe los patrones con r"..." (cadena raw): así \d no se confunde con una secuencia de escape de Python. En JavaScript la g final significa «todas las coincidencias» e i, «sin distinguir mayúsculas».

Escritorio con un monitor y un teclado iluminados con luz morada
Foto: Redd Angelo · dominio público (CC0) · vía StockSnap

Validar formatos (con cabeza)

Para validar que un texto completo cumple el formato, ancla el patrón con ^ y $:

/^\d{5}$/.test("28013")        // código postal español: true
/^\d{5}$/.test("2801")         // false
/^[6-9]\d{8}$/.test("612345678") // empieza por 6-9 y tiene 9 cifras

Pero ten claros sus límites:

  • Una regex comprueba la forma, no si el dato es real. Un DNI necesita además la letra de control; nuestro validador de DNI, NIE e IBAN la calcula.
  • Validar correos electrónicos con una regex «perfecta» es una trampa: el formato real es muy complejo. Basta con algo sencillo y comprobarlo enviando un correo.
  • Los patrones con cuantificadores anidados como (a+)+ pueden tardar muchísimo con ciertos textos y bloquear un programa (lo que se conoce como ReDoS). Mantén los patrones simples.
Validar formatos con una regex, con cabeza.Sí: Ancla el patrón con ^ y $. Sí: Prueba también textos que no deben coincidir. No: Comprueba la forma, no si el dato es real. No: Patrones como (a+)+ pueden bloquear el programaTen en cuentaAncla el patrón con ^ y $Prueba también textos que no deben coincidirComprueba la forma, no si el dato es realPatrones como (a+)+ pueden bloquear el programa
Validar formatos con una regex, con cabeza.

Trucos para no perderte

  1. Escribe el patrón poco a poco y comprueba cada paso en el probador.
  2. Prueba también textos que no deberían coincidir.
  3. Si el patrón se vuelve ilegible, quizá sea mejor dividir el texto con split() y unas condiciones normales.
  4. En VS Code, activa el icono .* del buscador (Ctrl+F) para buscar y reemplazar con expresiones regulares en tus archivos.