Lecciones del módulo (2/4)
Lookahead negativo: `(?!...)`
El lookahead negativo (?!...) es el hermano oscuro del lookahead positivo:
requiere que el patrón dado NO siga a la posición actual. Sigue siendo de ancho cero: no se consume ningún carácter.
Pattern: \d+(?! euro)
Sample: Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
^^Solo coincide 75, porque es la única secuencia de dígitos que NO va seguida de euro. Los dígitos 100 y 25 van seguidos de euro y quedan excluidos.
Patrones típicos de lookahead negativo
^(?!.*errore).*$-- una línea que NO contiene la palabra "errore".\b(?!the\b)\w+\b-- una palabra que no seathe.(?!\s)-- la posición actual NO es un espacio en blanco (útil como "trim").
Pattern: ^(?!.*\.bak$).*$
Sample (multiline con flag m):
foto.jpg
backup.bak
documento.txt
Match: foto.jpg, documento.txt (excluye backup.bak)Exclusiones avanzadas mediante lookahead negativo
El lookahead negativo (?!...) es esencial para implementar lógica de exclusión (como verificar que una contraseña no contenga palabras del diccionario o que un identificador no sea una palabra clave reservada como class o function).
Pruébalo tú
Encuentra cada número que NO vaya seguido de ' euro' (excluyendo así los precios en euros).
Mostrar pista
Usa (?! ...) para decir 'no debe seguir'. La secuencia ` euro` no debe aparecer después.
Solución disponible después de 3 intentos
Ejercicio de repaso
Encuentra cada palabra de al menos 3 letras que NO sea 'the' (case-insensitive).
Mostrar pista
Justo después de \b abre un lookahead negativo (?!the\b) que excluya únicamente la palabra the.
Solución disponible después de 3 intentos
Desafío adicional
Encuentra todas las palabras formadas por letras que no contengan la letra `x` en ninguna posición (ej. coincide con `test`, `game` pero no con `extra`, `box`).
Mostrar pista
Usa un lookahead negativo (?!\w*x) justo después del límite de palabra \b.
Solución disponible después de 3 intentos