Qué es esto (What)
Este artículo es una referencia técnica completa sobre el uso de expresiones regulares con alta portabilidad. Cubre sintaxis, coincidencia en múltiples líneas, técnicas de reemplazo, compatibilidad entre herramientas y diseño de patrones mantenibles.
Por qué es importante (Why)
Las expresiones regulares son fundamentales para validación, análisis, transformación y extracción de texto. Se utilizan en casi todos los lenguajes de programación y plataformas. Un uso correcto permite automatización eficiente y preparación de datos precisa.
Parte 1: Sintaxis básica
Patrón | Significado | Ejemplo | Coincidencias |
---|---|---|---|
. |
Cualquier carácter excepto salto de línea | a.c |
abc , a-c |
* |
Repetición de 0 o más veces del carácter previo | go*gle |
ggle , google |
+ |
Repetición de 1 o más veces del carácter previo | go+gle |
gogle , google |
? |
0 o 1 vez del carácter anterior | colou?r |
color , colour |
{n} |
Repite exactamente n veces | a{3} |
aaa |
{n,m} |
Repite entre n y m veces | a{2,4} |
aa , aaa , aaaa |
^ |
Inicio de línea | ^abc |
Línea que empieza con abc |
$ |
Fin de línea | abc$ |
Línea que termina en abc |
[] |
Uno de los caracteres especificados | [abc] |
a , b , c |
[^] |
Cualquier carácter excepto los especificados | [^0-9] |
Todo excepto números |
\d |
Dígito | \d+ |
123 , 007 |
\D |
No dígito | \D+ |
abc , XYZ |
\w |
Carácter de palabra | \w+ |
abc_123 |
\W |
Carácter no-palabra | \W+ |
#@! , espacios |
\s |
Espacio en blanco | \s+ |
espacio, tabulación, salto |
\S |
Carácter no blanco | \S+ |
abc , 123 |
` | ` | Operador OR | `foo |
() |
Agrupación | (abc)+ |
abcabc |
\b |
Límite de palabra | \bregex\b |
Coincide solo con regex |
Parte 2: Patrones prácticos (Soporte multilingüe)
Uso | Patrón | Notas |
---|---|---|
Solo números | ^\d+$ |
Todos los caracteres son dígitos |
Número decimal | ^\d+\.\d+$ |
Un solo punto decimal |
Solo alfanumérico | ^[a-zA-Z0-9]+$ |
Útil para IDs de usuario |
Correo (básico) | ^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$ |
Formato común |
URL http/https | https?://[\w.-]+\.[a-zA-Z]{2,}(/[\w./?=&%-]*)? |
Soporte de path y query |
Fecha ISO | \d{4}-\d{2}-\d{2} |
AAAA-MM-DD |
Teléfono internacional | \+\d{1,3}[\s-]?\d{1,14} |
Ejemplo: +34 612... |
Nombre de usuario | ^[a-zA-Z0-9._-]{3,20}$ |
Estilo redes sociales |
Contraseña fuerte | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ |
Requiere letras y dígitos |
Parte 3: Coincidencia multilínea
🔹 ¿Por qué usar [\s\S]*??
El carácter .
no coincide con saltos de línea. Para capturar bloques de texto con saltos de línea, se recomienda:
[\s\S]*?
💡 Alternativa:
[\s\S\n]*?
puede ser útil para entornos específicos como VSCode.
🔹 Patrones comunes
Uso | Patrón | Notas |
---|---|---|
Bloque de texto | [\s\S]*? |
Coincidencia segura |
Etiqueta <div> |
<div[\s\S]*?</div> |
Hasta etiqueta de cierre |
Comentario HTML | <!--[\s\S]*?--> |
Bloques de comentarios |
Código Markdown | "[\s\S]*? " |
Bloque entre backticks triple |
Parte 4: Técnicas de reemplazo
🔹 Sintaxis de grupos de reemplazo
${1}
,${2}
(VSCode, .NET, Python, etc.)$1
,$2
(JavaScript, sed, etc.)
🔹 Ejemplos útiles
Tarea | Patrón | Resultado |
---|---|---|
Invertir palabras | (\w+)\s+(\w+) |
${2} ${1} |
Envolver en <span> |
>([^<]+)< |
><span>${1}</span>< |
CSV → JSON | ^([^,]+),([^,]+),([^,]+)$ |
{ "a": "${1}", "b": "${2}", "c": "${3}" } |
Reformat fecha | (\d{4})/(\d{2})/(\d{2}) |
${1}-${2}-${3} |
camelCase → snake_case | ([a-z])([A-Z]) |
${1}_${2} |
Parte 5: Compatibilidad por herramienta
Herramienta | Multilínea | No-greedy | Sintaxis reemplazo | Notas |
---|---|---|---|---|
VSCode | ✅ (panel búsqueda) | ✅ | ${1} |
Recomienda [\s\S]*? |
JavaScript | ✅ (flag s ) |
✅ | $1 , $<nombre> |
Soporta grupos con nombre |
Python (re ) |
✅ (DOTALL ) |
✅ | \g<1> o \1 |
Usar strings crudos (r"" ) |
sed | ❌ (línea a línea) | ❌ | \1 , \2 |
Soporte básico |
grep/egrep | ❌ | ❌ | ❌ | Solo búsqueda, sin reemplazo |
Parte 6: Buenas prácticas y anti-patrones
✅ Recomendaciones
- Usa
[\s\S]*?
para bloques con saltos de línea - Evita
.*
, usa coincidencia no codiciosa - Agrupaciones innecesarias → usa
(?:...)
- Nombra grupos para mejor claridad (
(?<año>\d{4})
) - Añade comentarios si es complejo (usa
re.VERBOSE
)
❌ Antipatrones comunes
Patrón | Problema |
---|---|
.* |
Captura demasiado (coincidencia codiciosa) |
[^a-z] |
No compatible con caracteres acentuados |
Anidar etiquetas | HTML/XML anidado no es ideal con regex |
.+ |
Coincide con líneas vacías también |
Conclusión
Esta guía proporciona una referencia robusta para usar expresiones regulares de forma segura y eficaz en diferentes entornos.
El uso estándar de [\s\S]*?
para multilínea, junto con prácticas de diseño claras y compatibilidad de herramientas, garantiza expresiones reutilizables y mantenibles.
Una expresión bien diseñada es una herramienta poderosa y confiable.