Noticias

cabecera notica

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

 

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: 

expresiones de teléfono 

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 ‘-’.

expresión identificador objeto

  • 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\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?/

expresión identificador objeto dos

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.

web reglexlearn

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.