Esta vez va de números. Supongamos que queremos localizar en un documento Writer números entre 1 y 50, pero no mayores.
La expresión
\b\d\b
encontrará números de un solo dígito desde 0 a 9. La expresión
\b\d{1,2}\b
encontrará números de uno o dos dígitos, desde el 0 hasta el 99… siempre que no tenga una letra pegada. Por ejemplo no encontrará el número en a29. Si queremos localizar el número a toda costa necesitamos algunas condiciones con las «look-ahead» y «Look-behind assertions» más la condición lógica «o» que se consigue con la barra vertical. Algo así
(?<=[^\d]|^)\d{1,2}(?=[^\d]|$)
Lo que busca esta expresión es uno o dos dígitos que se encuentran entre algo que no es ni un dígito ni un inicio de párrafo y otra cosa que tampoco es un dígito o un final de párrafo.
Ya estamos más cerca. Para limitar el rango tendremos que aplicar un poco más de «selección»:
(?<=[^\d]|^)([1-5]?\d)(?=[^\d]|$)
ya busca entre 1 y 59, pero no 60 o mayores. ¡Ya estamos casi allí!
Contemplad ahora la expresión definitiva:
(?<=[^\d]|^)([1-4]?\d)(?=[^\d]|$)|50
Dejo como ejercicio para el lector el interpretar la expresión. Eso sí, es altamente aconsejable repasar el capítulo sobre expresiones regulares de mi libro antes de intentarlo.
Este interesante ejercicio de expresiones regulares se planteó hace unas semanas en la versión italiana de ask.libreoffice. Me llevó un buen rato el darme cuenta de cómo resolverlo… y aún más el recordar de dejarlo por escrito en el blog. Pero finalmente aquí está.
En lo único «esotérico» en que creo, en las expresiones regulares que son magia… ni soñando lo hubiera resuelto, muchas gracias como siempre por compartir.
Un abrazo
Últimamente he comenzado a pensar que un manual de expresiones regulares podría servir como base a un guión de película de terror XD
Saludos
esa expresion es demasiado compleja, no utilizo libre office, pero probando con \b([1-4]\d|50)\b creo que el resultado es apropiado
Esa expresión se saltea los números en cosas como «a29», pero es verdad, si no queremos buscar números «pegados» a letras es más simple.
Saludos
¡Qué casualidad! Estoy escribiendo ahora mismo sobre expresiones regulares yo también, aunque eso sí en Emacs. Cómo me encantan 😀
¡Emacs! Siempre sentí como que me faltaban dedos para poder usarlo 😉