Lecciones del módulo (4/4)
Lookaround en la práctica
Pongamos en práctica las cuatro formas de lookaround en escenarios del mundo real. Los lookarounds brillan cuando necesitas:
- Extraer un valor sin el contexto que lo identifica.
- Validar una cadena frente a múltiples condiciones independientes.
- Filtrar coincidencias que cumplan algunas condiciones pero no otras.
Validación de contraseñas
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Checks:
- al menos una mayúscula (?=.*[A-Z])
- al menos un dígito (?=.*\d)
- al menos un símbolo (?=.*[^a-zA-Z\d])
- longitud mínima de 8 .{8,}Cada lookahead comprueba una condición, empezando desde el principio (^). Todos son de ancho cero: el motor permanece en la posición 0 y luego consume con .{8,}$Block_content.
Extracción entre delimitadores
Pattern: (?<=\().+?(?=\))
Sample: Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (sin paréntesis)Lookbehind + lookahead + cuantificador lazy: extrae el contenido dentro de los paréntesis sin incluirlos.
Combinación de lookahead y lookbehind
El uso conjunto de lookahead y lookbehind permite aislar cadenas que se encuentran dentro de etiquetas o formatos específicos (por ejemplo, extraer texto entre dos etiquetas sin incluir las etiquetas en la coincidencia final). Esto evita operaciones posteriores de limpieza de cadenas.
Pruébalo tú
Extrae el valor de cada asignación `key=value` del log: SOLO los valores (sin claves ni `=`). Los valores pueden contener letras y dígitos.
Mostrar pista
Mueve `=` dentro de un lookbehind (?<==): de esta forma el match contiene solo el valor.
Solución disponible después de 3 intentos
Ejercicio de repaso
Encuentra qué palabras tienen al menos UNA letra mayúscula Y al menos UN dígito (en cualquier orden), localizándolas en el texto.
Mostrar pista
Doble lookahead al inicio: (?=\w*[A-Z])(?=\w*\d). Luego consume la palabra con \w+.
Solución disponible después de 3 intentos
Desafío adicional
Extrae solo los dígitos numéricos que estén encerrados exactamente entre paréntesis, por ejemplo, extrae `102` de `(102)` sin capturar los paréntesis.
Mostrar pista
Combina un lookbehind positivo (?<=\( ) para el paréntesis de apertura y un lookahead positivo (?=\) ) para el de cierre.
Solución disponible después de 3 intentos