Los lookarounds son patrones que permiten realizar coincidencias condicionales, basándonos en lo que está alrededor (antes o después) del patrón que estamos buscando.
Se dividen en dos categorías principales:
- Lookaheads: Verifican si un patrón sigue a otro patrón.
- Lookbehinds: Verifican si un patrón precede a otro patrón.
Ambos tipos de lookarounds no consumen caracteres en la cadena de texto. Es decir, que no forman parte de la coincidencia final.
Para usar los lookarounds, empleamos la siguiente sintaxis
Tipo | Sintaxis |
---|---|
Lookahead positivo | (?=patrón) |
Lookahead negativo | (?!patrón) |
Lookbehind positivo | (?<=patrón) |
Lookbehind negativo | (?<!patrón) |
¿Podían haberlo hecho más complicado y menos intuitivo? Posiblemente no 😆
Cómo usar lookahead
Lookahead positivo
El lookahead positivo (?=patrón)
verifica si un patrón específico sigue inmediatamente después de otro patrón. Si se cumple la condición, la coincidencia se realiza.
Por ejemplo, imaginemos que queremos encontrar todas las palabras que son seguidas por un signo de exclamación.
En este caso,
\w+
coincide con las palabras(?=!)
asegura que sean seguidas por un signo de exclamación.
Lookahead negativo
El lookahead negativo (?!patrón)
verifica que un patrón específico no siga a otro patrón. Si la condición se cumple (es decir, no se encuentra el patrón), se realiza la coincidencia.
Por ejemplo, supongamos que queremos encontrar palabras que no son seguidas por un signo de interrogación.
Aquí,
\w+\b
coincide con las palabras(?!\?)
asegura que no sean seguidas por un signo de interrogación.
Cómo usar lookbehind
Lookbehind positivo
El lookbehind positivo (?<=patrón)
verifica que un patrón específico precede a otro patrón. Si se cumple la condición, se realiza la coincidencia.
Imaginemos que queremos encontrar todas las letras que son precedidas por un signo de dólar.
text = "El precio es $10 y el descuento es $2."
pattern = r'(?<=\$)\d+'
matches = re.findall(pattern, text)
print(matches) # ['10', '2']
En este caso,
(?<=\$)
asegura que el número esté precedido por un signo de dólar- En este caso, lo cumple
10
y2
Lookbehind negativo
El lookbehind negativo (?<!patrón)
verifica que un patrón específico no preceda a otro patrón. Si la condición se cumple (es decir, no se encuentra el patrón), se realiza la coincidencia.
Supongamos que queremos encontrar números que no estén precedidos por un signo de dólar.
Aquí,
(?<!\$)
asegura que el número no esté precedido por un signo de dólar- En este caso, solo se cumple el
0
del primer$10
.