Greedy vs lazy en regex: cuándo usar cada uno

Clase 9 de 29Curso de Expresiones Regulares

Resumen

Domina expresiones regulares en CSV y evita errores comunes: aprende a separar columnas con precisión, usar el símbolo de interrogación para controlar greedy/lazy, y capturar la última columna sin cortar datos. Ideal para limpieza de datos, validación y búsqueda en logs.

¿Cómo extraer columnas de un CSV con expresiones regulares?

Para separar columna por columna, el truco está en combinar el punto (.) con cuantificadores y una coma como delimitador. Primero, recuerda que el punto significa «cualquier carácter». Luego, el cuantificador más (+) asegura «uno o más». Sin embargo, por defecto el motor hace el match completo en modo greedy: intenta llevarse lo máximo posible antes de la coma.

¿Qué patrón usar para separar por coma?

  • Greedy básico que se come de más:
.+,
  • Hacerlo mínimo con lazy para obtener la coincidencia más corta posible por columna:
.+?,

Con find, los matches salen «chiquitos» y en orden: primero la primera columna hasta la coma, luego la segunda, y así sucesivamente.

¿Cómo incluir la última columna si no termina en coma?

Cuando la última columna no tiene coma, necesitas permitir que el match termine en coma o en fin de línea. Crea una clase con la coma o el final:

.+?(,|$)
  • El más (+) asegura «siempre hay algo» antes del delimitador.
  • El modificador lazy (?) mantiene los matches cortos y consecutivos. Este patrón trae todas las columnas, incluyendo la última aunque cierre con salto de línea.

¿Qué significa greedy y lazy en regex y cómo usar el símbolo de interrogación?

El símbolo de interrogación (?) tiene dos usos clave:

¿Cómo funciona el símbolo de interrogación?

  • Cuantificador opcional: indica «cero o uno» del elemento anterior. Por ejemplo, a? permite que haya o no haya una «a».
  • Modificador de cuantificador: vuelve lazy a * o +, es decir, busca el match más pequeño posible. Ejemplo: .+? frente a .+.

Puntos clave: - Sin ?, el motor es greedy: trae «todo lo que pueda» antes del delimitador. - Con ?, el motor es lazy: hace los matches más pequeños posibles y encadena resultados columna por columna. - Con find, verás coincidencias consecutivas bien delimitadas.

¿Qué cuidados prácticos evitan errores al limpiar y validar datos?

Los detalles importan al construir clases, delimitadores y cuantificadores. Evita sorpresas al procesar datos reales.

  • Clases de caracteres: pueden incluir rangos y caracteres puntuales. Úsalas para delimitar con coma o fin de línea (,|$).
  • Asterisco (*) vs más (+): * permite «cero o más»; + exige «uno o más». Para columnas, + suele ser más útil.
  • Editor Atom: marca en rojo cuando la expresión no compila. Útil para detectar corchetes sin cerrar o escapes incorrectos.
  • Emojis: pueden representarse como varios caracteres bajo un solo ícono. Evita tratarlos a la ligera.
  • Caracteres especiales del español: acentos y la Ñ requieren atención específica.
  • Limpieza de CSVs grandes: filas con solo comas agregan ceros en lugar de null y pueden romper promedios o calificaciones.
  • Validación de input: las regex ayudan a limpiar entradas, validar formatos y buscar patrones en logs de servidores.

¿Con qué patrón te quedas hoy? Prueba, rompe y ajusta tus expresiones: juega con find, alterna entre greedy y lazy, y cuéntame en qué casos te funcionó mejor.