Noticias
null Divulgatic: Expresiones regulares para el día a día
Divulgatic: Expresiones regulares para el día a día
Una sección a cargo de Javier García sobre herramientas, recursos, ideas, curiosidades o novedades para creadores de contenidos, desarrolladores, y gente interesada en la tecnología en general
Javier García
Sección de Telemática
Expresiones regulares
Hay una conocida cita en mundo de la informática atribuida a un antiguo ingeniero en Netscape, que dice:
> Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems. Jamie Zawinski
Espero ahora no tener que escribir dos entradas en la Notica😊.
Las expresiones regulares, también conocidas como ER, regex o regexp, son una secuencia de caracteres que definen básicamente patrones de búsqueda o validación de texto de forma que nos permita bien buscar, extraer o reemplazar secuencias de texto más o menos complejas. Son muy utilizadas en lenguajes de programación pero que, como veremos, pueden sernos muy útiles en el día a día.
Aunque ni mucho menos pretendemos hacer un manual, vamos a esbozar alguna de las posibilidades y empezaremos por algún ejemplo sencillo. La siguiente expresión regular (ER) busca en una cadena, o en un archivo, la aparición de los siguientes parónimos: destornillar (sacar tornillo) y desternillar (de risa). Si lo hiciéramos con la búsqueda tradicional, tendríamos que buscar una y otra palabra que con una ER lo podríamos hacer de una vez, por ejemplo, con la siguiente expresada entre barras: /dest.rnillar/. El punto “.” se traduciría por cualquier carácter simple. Si quisiéramos ser más puntillosos usaríamos /dest[eo]rnillar/.
- La potencia viene al ir usando distintos operadores, agrupando expresiones, repeticiones, etc. Por ejemplo, para buscar el patrón Haendel, o Handel, o Händel en un texto podemos hacerlo mediante la ER: /H(a|ä|ae)ndel/ donde los paréntesis nos permiten agrupar subexpresiones y el operador ‘|’ indica alternativa, es decir o esto o lo otro.
- Teléfono según la RAE puede tener las siguientes abreviaturas: tel., teléf., tfno. y tlf. Para localizar en un texto todas estas posibles variaciones podríamos usar por ejemplo / t(el|lf|fno)(éf)?\./ donde el operador ‘?’ es que puede aparecer el grupo anterior o no y ‘\.’ es que esperamos el signo punto y no cualquier carácter. Gráficamente se puede entender más fácilmente:
La ER anterior como se puede apreciar encontraría otras abreviaturas seguramente no aceptadas, pero sólo queríamos mostrar un ejemplo para añadir otros operadores.
- Para localizar los identificadores de objeto digital o DOI podríamos usar la ER: /10\.\d{4,9}/[-._;()/:A-Z0-9]+/ donde introducimos además, número mínimo (4) y máximo (9), de dígitos (abreviado por \d), y otras secuencias como letras de la A a la Z mediante el guion ‘-’.
- Podemos complicarlo más por ejemplo buscar URLs más o menos bien formadas, en un documento podríamos usar: /(http|ftp|https)://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?/
Como se puede ver, los patrones pueden hacerse más y más complejos.
Muchos de los editores de texto avanzado como Notepad++, Visual Studio Code,… nos permiten buscar por medio de expresiones regulares, así como las herramientas por línea de comandos como grep en Linux o findstr en Windows.
Si queremos empezar a aprender esta útil herramienta, podemos ejercitarnos con alguna de las webs como Regexlearn donde vamos realizando pequeñas prácticas y aumentando el nivel de dificultad.
Otras páginas muy útiles son aquellas que nos permite visualizarlas de forma gráfica como Regulex o incluso que nos permitan probar la expresión con diversas entradas como Rubular o Debugexx
Así que la próxima vez que necesitemos hacer búsquedas algo más complejas pensad si las expresiones regulares os pueden ayudar.