21

Simple y sencillamente expresiones regulares

13889Puntos

hace 6 años

Transcripción:
Las expresiones regulares pueden ser tan complicadas como uno quiera. Y pueden ser realmente complicadas. Pero lo que nadie te dice, es que en realidad son muy sencillas de crear. Es simple y sencillamente ir creando patrones en donde cadenas de caracteres vayan entrando o no entrando. Y estos patrones que vamos a ir construyendo, diseñando, es para atacar una línea o un input. Es algo muy sencillo siempre y cuando sea una cadena de caracteres.

Y para explicar qué tan fácil puede llegar a ser, voy a utilizar lo más esencial del mundo que son, tal cual, palitos y bolitas. Imaginemos que cada una de estas piezas, de diferentes colores, de diferentes formas, es una línea de un archivo de texto. Me voy a fijar solamente en el archivo que es, en el caso que estemos leyendo un archivo CSV, por ejemplo, para limpiarlo de datos. Solamente me interesan ciertos tipos de datos muy puntual.

Y estos son los diferentes colores, los diferentes formas que tenemos para tratar. Podemos hacer una expresión regular tan sencilla como, “Solamente quiero quedarme con estos cuatro colores”, es lo que hay. Entonces, si cada vez que con mi programa yo estoy leyendo un CSV y paso línea a línea, va a llegar la primera línea y le voy a decir, “Okey, ¿coincide aquí? ¿Hace match con el color? Perfecto. Es un match y aquí se queda”. Viene otra línea, una línea completamente diferente ahora en forma de flor, supongo. Y va a entrar a mi programa y le va a decir, “¿Entra en azul? No. ¿Entra en verde? No. ¿Entra en rojo? No. ¿Entra en anaranjado? Sí”. Entonces aquí hay un match, y me va a decir, “Es correcta”, me la quedo o la trató de alguna forma especial.

La siguiente línea podrá venir y decir, “Okey, ¿es azul? No”, sucesivamente, y vamos a ver que no hace match con ninguna otra, por lo cual ésta va a quedar fuera. No la necesitamos, no nos sirve de alguna forma, no contiene ni la forma ni el color que estamos buscando. En particular, aquí solamente estamos buscando a través de colores.

Puede pasar otra amarilla y pasar exactamente lo mismo y la descartamos. He descartado estas dos piezas para mi programa, no tienen la forma que necesito para la lógica de negocio. Puedo seguir continuamente, y si hago la iteración y empiezo a ordenar y a poner las piezas en donde van, y a partir de aquí, yo puedo operar con esto. Yo sé que tienen una forma específica. En particular, aquí tienen un color específico.

Pero, podemos hacerlo todavía más difícil. Aquí podemos decir, “Estos son solamente letras de la A a la J, estas son de la J a la V, estos son dígitos nada más y estos son palabras que empiecen con mayúscula”. Cada una tiene cosas diferentes. Yo voy haciendo estos patrones conforme los vaya necesitando.

Pero podemos ser un poco más complejos. Sin importar el color, por ejemplo, podríamos fijarnos en las formas. Y esta es una expresión regular un poco más compleja, digámoslo así. Cada vez que llegue una pieza va a pasar por, la iteración es hacia acá, suponiendo, entonces va a llegar y va a decir, “Okey, ¿tiene un match en la forma? Sí, me la quedo, esta me es útil”. De repente vamos a llegar con otra pieza diferente, otra línea de nuestro programa, un CSV que tiene dígitos, por ejemplo, y temperaturas, pero solamente necesitamos las fechas de 2018, que tiene el 2018 ahí escrito. Esta va a pasar, corresponde aquí. En realidad, sí corresponde, o sea, sí puede entrar, sí cabe en esta pieza, una adentro de otra. Hay que ser cuidadosos con las expresiones regulares para saber exactamente qué es lo que necesitamos, ser tan específicos y tan estrictos como necesitemos.

En particular, esta sí funciona. Puede ser bueno o puede ser malo. Si después yo llego con otra pieza, y le intentó hacer un match aquí, y no, aquí no cabe. Entonces ésta queda descartada, no me sirve para lo que yo necesito.

Y así puedo seguir absolutamente con todas las piezas. Si se fijan, en esta expresión regular no estoy utilizando en lo más mínimo colores, simple y sencillamente que la forma sea correcta. Puedo utilizar dígitos, puedo utilizar caracteres especiales, puedo utilizar solamente los ASCIs, solamente los no ASCI, y así ir buscando sobre textos enormes.

Este en particular no cabe aquí, no cabe aquí, lo descarto. No importa que haya sido igual a esto. Y con esto, lo que intentó hacerles ver es que, por ejemplo, este sí cabe, se va a quedar junto con éste, y así sucesivamente. Este también cabe y es mucho más laxo este patrón, que diseñé, que este otro.

Pero de alguna manera empiezo a hacer un match y saber cuándo sí y cuando no van cabiendo. Y aunque no haya colores, estos dos, por ejemplo, los dos caben aquí.

Las expresiones regulares son muy útiles tanto para tomar, quedarnos con partes de textos importantes en el backend o en el front-end, pero es tanto más importante qué lo que vamos descartando.

Si tenemos archivos gigantes CSVs que tienen mucha posible basura, con las expresiones regulares nos es muy, muy, muy fácil quitar todo lo que no sirve. Y estas dos piezas ya no me sirven en lo más mínimo. Con esto, estoy ahorrando de una manera impresionante uso de CPU, incluso uso de memoria.

Una de las grandes ventajas de las expresiones regulares es que están atadas a casi cualquier lenguaje. Todos los lenguajes modernos, todos los lenguajes, de hecho ni siquiera modernos, tienen una módulo, tienen una librería de expresiones regulares y realmente puede ser potente.

No necesitaremos para saber si es un mail, primero, ver el texto, que tenga una arroba, “Sí, sí, tiene una arroba. ¿Después de la arroba tiene un punto? Sí, puede ser que tenga un punto. Mejor partamos en un arreglo de Strings a partir de la arroba y después a partir de los puntos”. Ver que la primera parte no tenga tales, cuales caracteres.

Eso, la lógica, puede ser correcta pero es realmente lenta, tardada y compleja. Con una expresión regular podemos darle el patrón que yo quiero que esto sea un correo electrónico y tiene que ser exactamente de esta forma. No me importa de qué color sea, no me importa si la tengo en azul, no me importa si la tengo en rojo, no me importa si es Gmail, Hotmail, Yahoo, lo que sea. Va a hacer match aquí, por lo cual entra perfectamente independiente del color.

Si utilizamos esta otra expresión regular que es más laxa, solamente me importa el color, no me importa qué forma tenga, luego podré hacer la selección y el descarte de piezas de datos que no quiero utilizar en mi programa o que los quiero utilizar, y además, una de las grandes ventajas que tienen muchísimas implementaciones de expresiones regulares, es que a la hora de hacer un match, a la hora de decirme, “Esto”, yo a partir de ahí puedo extraer datos para operar directamente con ellos. Si tengo una línea de CSVs de siete columnas, yo automáticamente puedo decirle, “Quiero que la columna tres y cuatro las necesito para hacer una operación matemática”.

Las expresión regulares, sí, pueden ser muy complejas, pero, no son nada difíciles de entender. A través de este curso sin tecnicismos, sin nada extremadamente complejo y con ejemplos puntuales, por ejemplo, cómo hacer una expresión irregular que lea un mail o un dominio o una latitud y longitud, vamos a ir creciendo en diferentes lenguajes cómo aprender a utilizarlas para que sean esa herramienta que siempre nos ayude y sea la primera para solucionar problemas de grandes cantidades de datos en String.

Pues bien, este es el curso de expresiones regulares. Es un esfuerzo de varios meses de un equipo increíble, desmenuzando un tema que puede llegar a ser tan complejo para explicarlo desde abajo, de una manera increíblemente sencilla y lo logramos. Aquí tienes el curso. Y si quieres ver una explicación casi tan buena como ésta, aquí tienes este otro vídeo. Y no olvides suscribirte al canal.

Valeria
Valeria
valdamatoo

13889Puntos

hace 6 años

Todas sus entradas
Escribe tu comentario
+ 2
1
4724Puntos
5 años

Es demasiado útil e interesante como para dejarlo pasar!