top of page
Foto del escritorJaime Franco Jimenez

Regex con buscarx y coincidirx

Microsoft ha liberado en las funciones BUSCARX, y, COINCIDIRX, en el argumento modo de coincidencia, coincidencia de regex.

Quiere decir que BUSCARX y COINCIDIRX puede coincidir con partes del texto de una celda.


Veamos un ejemplo, tenemos una serie de nombres, y, cada nombre tiene asignado un valor.

Queremos extraer el nombre cuyo valor contenga la barra inclinada (/).


En una celda, ponemos la funcion BUSCARX, como argumento valor buscado ponemos el patrón a buscar que es “[/]+”, es decir, que devuelva todas las barras inclinadas que haya en cada celda, como argumento matriz de búsqueda, seleccionamos el rango B2:B6, como argumento matriz devuelta, seleccionamos el rango A2:A6, omitimos el argumento si no se encuentra, como argumento modo de coincidencia, seleccionamos 3, coincidencia de regex.


=BUSCARX("[/]+";B2:B6;A2:A6;;3)

 

Vemos que nos devuelve el nombre de Jaime que es quien tiene la barra inclinada incluida en el número.

Ahora, vamos a ver la posición que ocupa el numero que contiene la barra inclinada, para ello, usamos la funcion COINCIDIRX, como argumento valor buscado, ponemos el mismo patrón, como argumento matriz buscada, seleccionamos el rango B2:B6, como modo de coincidencia, seleccionamos 3.


Nos devuelve la posición 2.

Ahora, tenemos una serie de correos, unos bien escritos, y, otros no.

Debemos de crear un informe con los correos que están correctamente escritos.


  • Un correo electrónico puede contener Caracteres alfanuméricos, puntos, guiones bajos, porcentajes, signos más y guiones antes del símbolo @.

 

Podemos usar la inteligencia artificial como ChatGPT, o, Copilot, voy a usar Copilot, en la ventana para preguntar, ponemos:

Hacemos clic en enviar.

Nos devuelve el código para JavaScript.

Pero, tenemos el código de la expresión regular.

Lo copiamos.


Vamos a la hoja de Excel, en una celda ponemos la funcion REGEXTEST, como argumento texto seleccionamos la celda A11, que es el primer correo, como argumento patrón, ponemos comillas dobles, pegamos la expresión, cerramos comillas dobles, cerramos paréntesis.


=REGEXTEST(A11;"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")


Aceptamos, y, nos devuelve VERDADERO, ya que el primer correo está escrito correctamente.


Arrastramos y tenemos VERDADERO donde el correo esta escrito correctamente, y, FALSO donde no lo está.

Volvemos a copiar la expresión regular.


En una celda, ponemos la función BUSCARX, como argumento valor buscado, ponemos dobles comillas dobles, pegamos la expresión, cerramos comillas dobles, ya tenemos el patrón.


=BUSCARX("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"

 

Como argumento matriz de búsqueda, ponemos la celda A11, como argumento matriz devuelta, volvemos a poner la celda A11, como argumento si no se encuentra, ponemos dobles comillas dobles, como argumento modo de coincidencia, seleccionamos 3.


=BUSCARX("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";A11;A11;"";3)


Aceptamos y nos devuelve el correo electrónico porque está bien escrito.


Después del signo igual, ponemos la funcion BYROW, como argumento array seleccionamos el rango A11:A14, como argumento funcion, ponemos LAMBDA, declaramos una variable, como argumento calculo es la función BUSCARX, pero, cambiamos A11 por la variable creada.


=BYROW(A11:A14;LAMBDA(x;BUSCARX("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";x;x;"";3)))

 

Tenemos una matriz desbordada de cuatro filas con los correos bien escritos, y, blanco donde no están bien escritos.

Ahora, tenemos tres artículos, cada articulo tiene asignado un valor.

Queremos extraer las cadenas que no contengan números.


El patrón que debemos de usar es [^\d]+, que indica que no se deben de incluir números.

En la celda C1, ponemos la funcion REGEXTEST, como argumento texto ponemos la celda B17, como argumento patrón ponemos "[^\d]+", cerramos paréntesis.


=REGEXTEST(B17;"[^\d]+")

 

Nos devuelve FALSO porque contiene números.

En la celda D17, usamos la funcion BUSCARX, como argumento valor buscado pegamos el patrón, como argumento matriz de búsqueda, seleccionamos el rango B17:B19, como argumento matriz devuelta, seleccionamos el rango A17:A19, omitimos el argumento si no se encuentra, como argumento modo de coincidencia, seleccionamos 3.


=BUSCARX("[^\d]+";B17:B19;A17:A19;;3)

 

Obtenemos Art2 que no contiene números.


Sabemos que BUSCARX cuando encuentra la primera coincidencia se para y no sigue buscando, pues, después del signo igual usamos la funcion MAP, como argumento array, seleccionamos el rango B17:B19, como argumento array2, seleccionamos el rango A17:A19, como argumento lambda, ponemos LAMBDA, declaramos dos variables, como argumento calculo, es la funcion BUSCARX, cambiamos el argumento matriz de búsqueda por la variable “x”, cambiamos el argumento matriz de búsqueda por la variable “y”.


=MAP(B17:B19;A17:A19;LAMBDA(x;y;BUSCARX("[^\d]+";x;y;;3)))

 

Tenemos una matriz desbordada de tres filas, donde tenemos los artículos que contienen letras, y, blanco donde no contiene.

Usamos el argumento si no se encuentra de BUSCARX, y, ponemos blanco.


=MAP(B17:B19;A17:A19;LAMBDA(x;y;BUSCARX("[^\d]+";x;y;"";3)))



Miguel Angel Franco Garcia

3 visualizaciones0 comentarios

Comments


bottom of page