Free Trial

Base de conocimiento

Dominio de Herramientas | RegEx

Community_Admin
Alteryx
Alteryx
Created

Este artículo es parte de la serie Dominio de Herramientas, una compilación de contribuciones a la Base de Conocimiento para introducir diferentes ejemplos prácticos de las herramientas de Alteryx Designer. Vamos a profundizar en los usos de la herramienta RegEx en nuestro camino hacia el dominio de Alteryx Designer:

 RegEx.png

La herramienta RegEx es como la navaja suiza del análisis en Alteryx; hay muchas maneras de usarla para hacer cosas más rápido y efectivamente, y por más que solo uses la navaja, es inmensamente útil. Algunas veces eso es todo lo que necesitas, pero si te tomas el tiempo de aprender cómo usar algunas herramientas más de esa navaja, comenzarás a ver que no hay casi nada que no puedas hacer con ella.

 

mr bean.pngmacgyver.jpg

Antes y después de usar la herramienta RegEx.

 

RegEx, ¿para qué sirve?

 

RegEx es una abreviación de Expresión regular (por la contracción de las palabras regular expression), esencialmente puedes conciderarla como otro idioma. Utiliza símbolos como los demás idiomas, pero, en las expresiones regulares, estos símbolos se utilizan para hacer coincidir secuencias de letras, números o caracteres en un texto. Es un idioma que se encarga de reconocer patrones.

 

Los humanos somos realmente buenos para estas cosas. Digamos que tienes este bloque de texto:

 

3345 Michelson Drive, Suite 400, Irvine, CA 92612

12303 Airport Way, Suite 250, Broomfield, CO 80021

Two North Riverside Plaza, Suite 1430, Chicago, IL 60606

 

No tendrás problemas en ver que son direcciones ni qué parte es el número de la calle o el nombre de la ciudad. Pero una computadora solo ve un bloque de texto y no le importa verificar si es una dirección o no. RegEx es una manera en la que podemos 'reconocer' datos útiles en un texto. Traduzcamos esto a RegEx:

 

3345 ^/d+ El ^ significa el comienzo de una línea en RegEx y es buena práctica incluirlo en tu patrón inicial. Aquí, nuestro patrón es /d que significa 'cualquier caracter numérico' (0-9). El + significa que queremos hacer coincidir la expresión anterior una o más veces. Ya que la primera parte de la dirección es un número de calle, esto nos permite tener un número de cualquier longitud.
Michelson Drive [^/d]+ Para hacer coincidir la calle, tenemos que permitir que nuestra expresión tome múltiples palabras de caracteres, incluso cualquier cantidad de espacios, ya que las calles puede que sean más largas que una palabra. Una manera de hacer coincidir esto es a través de lo que no esperamos, usando [^...]. La anotación de agrupamiento hace coincidir 'cualquier caracter que no esté enumerado aquí'. El resultado es, haz coincidir una o más veces cualquier caracter que no sea un número.
Suite 400 .*

La siguiente parte de la dirección es un número de oficina, que puede o no estar presente, y podría potencialmente tener varias convenciones de nomenclatura. Para definir una expresión flexible que haga coincidir todo lo que vemos, podemos usar un . para hacer coincidir 'cualquier caracter'. El * , entonces, significa que podemos hacer coincidir cualquier caracter cero o más veces.

Irvine [^/d]+ Como antes, esto solo significa 'cualquier caracter que no sea un número'. 
CA /u{2} Para hacer coincidir el estado, podemos utilizar /u para significar 'cualquier letra mayúscula'. Ya que esperamos que esta sea siempre una secuencia de dos letras, también podemos especificar la longitud de la coincidencia usando {...} después de la expresión, o 'haz coincidir todos los pares de letras mayúsculas'.
92612 /d{5}$ El código postal tendrá 5 dígitos, entonces podemos hacer algo así como decir 'haz coincidir caracteres de cinco números'. Luego, podemos agregar $ para significar que ese el final de la línea actual

 

Herramientas básicas1.png

 

Hay varios símbolos que se utilizan para crear expresiones RegEx, pero Alteryx te proporciona una buena 'ficha de ayuda' justo en la herramienta.

 

No necesitas mucho más que eso para empezar a usar RegEx y, al igual que en Alteryx, descubrirás que hay muchas maneras diferentes en las que puedas crear una expresión para hacer coincidir el patrón. Así que no te preocupes demasiado por los detalles y no temas pasar un poco de tiempo con el viejo y querido método de aprendizaje de "prueba y error".

 

Para ver guías más completas de RegEx, también puedes consultar a la Guía Boost-Extended Format String Syntax, y a la Guía de sintaxis Perl.

 

Alteryx ha estructurado la funcionalidad de RegEx en cuatro métodos: Coincidir, Analizar, Reemplazar y Tokenizar

 

Coincidir

 

El método Coincidir simplemente verifica si una cadena puede ser descrita por la expresión regular dada, y genera un True (Verdadero) o False (Falso). Utilicemos los elementos de expresión en la tabla anterior para hacer coincidir nuestras direcciones. Puedes crear una expresión larga poniéndolas juntas e incluyendo espacios /s y comas , donde sea que aparezcan.

 

2.png

Las primeras dos direcciones coinciden usando esta expresión, pero la tercera dirección se desvía de lo que esperábamos ver y falla. Debido a una oscura regla de los edificios donde el nombre es el mismo que la dirección, el número de calle no aparece y nuestra expresión regular no puede coincidir con ella.

 

La clave de escribir una buena expresión RegEx es anticipar estas excepciones en tus datos y tenerlas en cuenta. Para hacer coincidir el 'Two' en esta dirección, creemos otra expresión para verificar si esta no coincide. La mayoría de las direcciones comenzarán con caracteres numéricos, pero, si no lo hacen, entonces esta expresión buscará una palabra en su lugar. Así se ve:

 

(?:^/d+)|(?:^/w+)

 

Esta es mucho más simple de lo que parece y realmente utiliza solo dos símbolos adicionales de RegEx. El símbolo de la barra vertical | significa 'o'. Por ejemplo, a|b solo verificaría si a coincide y, si no, si b coincide. El segundo símbolo es (?:...), también conocido como un grupo sin marcar. Esta es una forma que tenemos de agrupar cosas para la operación o.

 

3.png

En resumen, el primer grupo aquí (?:^/d+) solo está haciendo lo mismo que antes pero, cuando falla, la expresión intenta hacer coincidir al segundo grupo (?:^/w+). Esto nos permite hacer coincidir a la versión con palabras de nuestra dirección anterior sin problemas.

 

Para aprender más sobre Coincidir, consulta:

Crédito extra: Hay muchas formas de estructurar RegEx; comenta a continuación con una mejor alternativa de (?:^/d+)|(?:^/w+). ¿Por qué es mejor?

 

Analizar

 

Coincidir está bien en el sentido de que puedes usarlo para realizar validación, pero el método Analizar es realmente cuando RegEx se desarrolla plenamente y te permite extraer información útil de un bloque de texto. La herramienta RegEx facilita esto; lo único que hay que hacer es colocar paréntesis (...) alrededor de cada cosa que queramos extraer. Estos se llaman grupos marcados; la contraparte de nuestros grupos sin marcar mencionados antes (?:...).

 

4.png

A medida que escribes el paréntesis, verás que estos aparecen en una ventana Campos de salida similar a la herramienta Seleccionar, que te permite cambiar los nombres de los campos y cambiar sus tipos de datos.

 

Para  aprender más sobre Analizar, consulta:

Reemplazar

Como puedes ver, el método Analizar es realmente solo una extensión de Coincidir que nos permite extraer cosas del texto y colocarlas en una columna nueva.

 

Con Reemplazar, podemos analizar componentes de nuestra cadena, reemplazarlos e, incluso, reordenarlos. Podemos hacerlo especificando grupos marcados para indicarle a la herramienta RegEx qué reemplazar y dónde, en un idioma que todos pueden comprender.

 

Podemos usar el signo de dólar $ junto con números para especificar cada grupo marcado exacto. Por ejemplo, $1, $2 y $3 se refieren al primer, segundo y tercer grupo marcado, respectivamente. Así que, para nuestra lista de destinatarios, si quisiéramos analizar una lista de ciudades y estados, podemos escribir la expresión $4, $5.

 

5.png

Nota que pudimos agregar una coma y un espacio, solo escribiendo en esa caja de texto. El método Reemplazar es muy flexible y también puedes utilizarlo desde la herramienta Fórmula con la función Regex_Reemplazar.

 

Para aprender más sobre Analizar, consulta:

Tokenizar

 

RegEx es muy útil cuando tenemos todo en una lista perfectamente ordenada, pero ¿qué pasa si todas estas direcciones son arrojadas por una llamada de API o una base de datos como un solo bloque de texto?

 

3345 Michelson Drive, Suite 400, Irvine, CA 92612,12303 Airport Way, Suite 250, Broomfield, CO 80021,Two North Riverside Plaza, Suite 1430, Chicago, IL 60606

 

Bueno, esto no es muy útil; está todo delimitado por comas, pero no podemos saber con certeza cuándo termina una dirección y empieza otra. Lo que necesitamos es el método Tokenizar, que tomará ese trozo de texto y lo dividirá en columnas o filas, al igual que la herramienta Texto a columnas. Hay dos diferencias importantes que distinguen a Tokenizar de RegEx:

  1. En lugar de hacer coincidir lo que no quieres (como una coma), haces coincidir lo que sí quieres (todo lo demás).
  2. Tienes la opción de elegir qué se divide y qué se ignora usando un grupo marcado

Esto puede parecer confuso, pero realmente te da mucha más flexibilidad sobre qué o cómo divides tus datos. Para ilustrar, dividamos el bloque de texto de direcciones en múltiples filas, usando la coma como nuestro delimitador.

 

6.png

 

Ya que tenemos que hacer coincidir todo lo que queremos, debemos usar la expresión (.+?)(?:,|$). Desglosemos esto:

  • .+ quiere decir cualquier caracter individual . que coincide una o más veces +
  • ? es la forma en que le pedimos a esta coincidencia que sea perezoso y no ambicioso. Esta es una distinción realmente útil que puede resultar un poco difícil de comprender al principio, pero, para este curso intensivo, concentrémonos en qué significa ? --Haz coincidir lo que ocurre antes de cero veces (ósea, nunca) o exactamente una ves.
  • El signo más + es, en realidad, lo opuesto: es un símbolo ambicioso, por lo que el caracter único . anterior intentará coincidir una o más veces. Entonces, ¿qué pasa cuando le pedimos a algo ambicioso que sea perezoso? Bueno, en realidad modifica solo qué tan ambicioso puede ser forzándolo a mirar la siguiente coincidencia. Entonces lo que .+? en realidad quiere decir es:
    'haz coincidir un caracter una o más veces hasta que coincida con lo que sea que venga a continuación'.
  • Lo que viene a continuación es un grupo sin marcar (?:,|$) que esencialmente funciona como un cartel de PARE para el (.+?) anterior. Debido a que no se encuentra en el grupo marcado, no estará presente en el resultado. Solo está en un grupo sin marcar, por lo que podemos pedirle que busque ya sea una coma , o el $ del final de la línea al final de la leyenda de texto.

¡Eso sí que es mucha información!

 

Obviamente, la herramienta Texto a columnas puede dividir mediante una coma más fácilmente, pero la flexibilidad de Tokenizar gana cuando intentamos hacer algo un poco más útil. Por ejemplo, podemos usarla para dividir ese bloque de información sobre direcciones en las tres direcciones originales.

 

7.png

En este caso, solo estamos usando nuestra última expresión coincidente para el código postal /d{5} para marcar dónde termina cada coincidencia. Como en el caso anterior, sabemos que cada línea terminará con una coma o con el fin de la línea, y podríamos usar el (?:,|$) aquí para dividirlas con éxito. En el ejemplo anterior, elegí mostrar la habilidad de ? para hacer coincidir cero o una vez para reemplazar esto; para que podamos dividir con una 'coma opcional' después de la coincidencia del grupo marcado.

 

Para aprender más sobre Tokenizar, consulta:

Crédito extra: El ,? no funcionará en el caso anterior, dividiendo solo por coma: (.+?),? en lugar de (.+?)(?:,|$). ¿Por qué?

Deja un comentario con tu respuesta abajo.

 

¡A esta altura, ya debes tener conocimiento experto de la herramienta RegEx! Si ya eres un genio con otras herramientas de Designer, contribuye al Blog de la Comunidad compartiendo tus experiencias y diciéndonos cómo y para qué utilizas nuestras herramientas en tu vida diaria. Si te interesa contribuir al Blog, envía un correo electrónico a flavia.brancato@alteryx.com para acceder a la sección.

Todos los lunes publicamos sobre una herramienta. Con eso en mente, nos encantaría saber cuál es tu favorita o, quizás, qué herramienta te gustaría ver aquí en la Comunidad la próxima semana. No olvides de suscribirte al panel de la Base de Conocimiento para recibir notificaciones de las últimas novedades.

 

*Esta publicación fue escrita originalmente por @AlexKo en la comunidad en inglés

Adjuntos