^
Inicio de linea o cadena
Ejemplo práctico
^Hello # coincide con "Hello world" pero no con "say Hello"
developer reference
Referencia práctica para usar Regex a diario con búsqueda, copia rápida e impresión PDF.
La prueba usa JavaScript RegExp con búsqueda global (g). Usa (?<name>...) para grupos con nombre. La sintaxis y las opciones de Python re se ejecutan en Python, no en esta prueba. Límites: 100.000 caracteres de texto, 4.000 de patrón y 1.000 coincidencias; se detienen los patrones lentos.
35 comandos visibles
^
Inicio de linea o cadena
^Hello # coincide con "Hello world" pero no con "say Hello"
$
Fin de linea o cadena
world$ # coincide con "Hello world" pero no con "world class"
\b
Limite de palabra: borde palabra/no palabra
\bcat\b # "cat" pero no "catch" ni "concat"
\B
Limite de no-palabra
\Bcat\B # "concatenate" pero no " cat "
*
0 o mas veces (greedy)
ab*c # "ac", "abc", "abbc", "abbbc"…
+
1 o mas veces (greedy)
ab+c # "abc", "abbc" pero NO "ac"
?
0 o 1 vez (opcional)
colou?r # "color" y "colour"
{n,m}
Entre n y m veces
\d{2,4} # 2, 3 o 4 dígitos
\d{3} # exactamente 3 dígitos
*? +? ??
Versiones lazy (no greedy)
# entrada: "<b>bold</b>"
<.+> # codicioso: "<b>bold</b>"
<.+?> # no codicioso: "<b>" y luego "</b>"
[abc]
Clase de caracteres: uno de los caracteres listados
[aeiou] # cualquier vocal
[a-z] # a-z en minúsculas
[A-Za-z0-9]
[^abc]
Negacion: cualquier caracter excepto los listados
[^0-9] # no dígitos
\d \w \s
Atajos: \d digito, \w palabra, \s espacio
\d # [0-9]
\w # [a-zA-Z0-9_]
\s # [ \t\n\r]
\D \W \S
Atajos negados
\D # no es un dígito
\W # no es un carácter de palabra
\S # no es un espacio
.
Cualquier carácter excepto finales de línea; la opción s (Python re.S) incluye saltos de línea
a.b # "aXb", "a b", "a1b"…
(...)
Grupo de captura: captura el match
(\d{4})-(\d{2})-(\d{2})
# coincide con "2024-01-15", group(1)="2024"
(?:...)
Grupo sin captura: agrupa sin capturar
(?:Mr|Mrs|Ms)\.\s\w+
# agrupa alternativas sin capturarlas
(?<name>...)
Grupo con nombre: captura con nombre
JavaScript: (?<year>\d{4})-(?<month>\d{2})
match.groups.year
Python: (?P<year>\d{4})-(?P<month>\d{2})
m.group("year")
a|b
Alternativa: a o b
cat|dog # "cat" o "dog"
(https?|ftp)://
(?=...) (?!...)
Lookahead positivo y negativo
\d+(?= euro) # número seguido de " euro" (sin capturar " euro")
\d+(?! euro) # número NO seguido de " euro"
(?<=...) (?<!...)
Lookbehind positivo y negativo
(?<=\$)\d+ # número precedido por "$"
re.search (pattern, string)
Encuentra la primera ocurrencia en cualquier posicion
import re
m = re.search(r"\d+", "abc 123 def")
if m:
print(m.group()) # "123"
re.match (pattern, string)
Coincide solo al inicio de la cadena
re.match(r"\d+", "123abc") # coincidencia
re.match(r"\d+", "abc123") # None
re.findall (pattern, string)
Devuelve una lista de todos los matches
re.findall(r"\d+", "1 apple, 2 bananas, 3 pears")
# → ["1", "2", "3"]
re.sub (pattern, repl, string)
Reemplaza matches por repl
re.sub(r"\s+", " ", "too many spaces")
# → "too many spaces"
re.sub(r"(\w+)", r"[\1]", "hello world")
# → "[hello] [world]" (referencia inversa)
re.split (pattern, string)
Divide una cadena por matches del patron
re.split(r"[,;\s]+", "a, b; c d")
# → ["a", "b", "c", "d"]
re.compile (pattern, flags)
Precompila un patron para uso repetido
EMAIL = re.compile(r"[\w.+-]+@[\w-]+\.[\w.]+")
for line in lines:
if EMAIL.search(line): ...
re.IGNORECASE
Matching sin distinguir mayusculas
re.findall(r"hello", text, re.I)
re.compile(r"hello", re.IGNORECASE)
re.MULTILINE
^ y $ coinciden con inicio/fin de cada linea
re.findall(r"^\w+", text, re.M)
re.DOTALL
El punto (.) tambien coincide con newline
re.search(r"<div>.+?</div>", html, re.S)
re.VERBOSE
Permite comentarios en el patron (re.X)
pattern = re.compile(r"""
\d{4} # año
-
\d{2} # mes
""", re.X)
[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}
Patrón simplificado de correo; no es un validador completo
[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}
https?://[\w/:%#$&?()~.=+\-]+
Patrón simplificado de URL HTTP/HTTPS; no es un analizador completo
https?://[\w/:%#$&?()~.=+\-]+
\b(?:\d{1,3}\.){3}\d{1,3}\b
Patrón con forma IPv4; no valida los rangos de octetos (0–255)
\b(?:\d{1,3}\.){3}\d{1,3}\b
\b\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])\b
Patrón con forma YYYY-MM-DD; no valida las fechas del calendario
\b\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])\b
(?:\+39)?[\s-]?(?:0\d{1,4}|3\d{2})[\s-]?\d{6,8}
Patrón simplificado de teléfono italiano; no confirma que sea válido o asignado
(?:\+39)?[\s-]?(?:0\d{1,4}|3\d{2})[\s-]?\d{6,8}
La prueba usa JavaScript RegExp. La sintaxis de Python como (?P<name>...) y re.VERBOSE debe probarse en Python. Los patrones ilustran formatos, no una validación completa.
Usa Imprimir PDF. La versión imprimible incluye todos los comandos y ejemplos, incluso en secciones ocultas por la búsqueda.
Sí. Sirve los archivos estáticos con un servidor HTTP local. Búsqueda, filtros y copia funcionan en el navegador; la prueba Regex necesita HTTP con workers permitidos.