top of page
Foto del escritorJaime Franco Jimenez

Expresiones regulares

Función REGEXTEST

Permite comprobar si alguna parte del texto coincide con una expresión regular.


Devolverá VERDADERO si hay coincidencia y FALSO si no la hay.


Las expresiones regulares se utilizan para operar en cadenas de caracteres.


Sintaxis:

REGEXTEST(texto, patrón, [case_sensitivity])

 

·        Texto. Argumento obligatorio, es el texto o referencia a una celda que contiene el texto con el que deseamos hacer coincidir.

·        Patrón, argumento obligatorio, es el patrón (expresión regular) de texto que deseamos que coincida.

·        Case_sensitivity. Argumento opcional, determina si la coincidencia debe de distinguir entre mayúsculas y minúsculas, de forma predeterminada, distingue entre mayúsculas y minúsculas.


Los valores para aceptar es 0, que distingue entre mayúsculas y minúsculas, y, 1, que no distingue entre mayúsculas y minúsculas.


Podemos usar símbolos llamados tokens, como pueden ser:

·        “[0-9]”, buscara en una cadena si hay un numero entre 0 y 9.

·        “[A-Z]”, buscara en una cadena si hay una letra mayúscula entre la A y la Z.

·        ".": cualquier carácter.

·        "a": el carácter "a".

·        "a*": cero o más "a"

·        "A+": una o más "A"

 

Veamos un ejemplo, tenemos las siguientes cadenas:

Quiero extraer aquellas cadenas que contengan números.


En la celda B1, pongo la función REGEXTEST, abrimos paréntesis, como argumento texto, seleccionamos el rango A1:A3, como argumento patrón, entre comillas dobles, ponemos [0-9].


=REGEXTEST(A1:A3;"[0-9]")

 

Obtenemos una matriz desbordada en vertical con VERDADERO donde la cadena contiene números, y, FALSO donde no contiene números.

Después del signo igual, ponemos la función FILTRAR, como argumento array, seleccionamos el rango A1:A3, como argumento include, es la función REGEXTEST.


=FILTRAR(A1:A3;REGEXTEST(A1:A3;"[0-9]"))


Aceptamos y tenemos las cadenas que contienen números.

Ahora, tenemos las siguientes cadenas, he cambiado la vocal “a” de la segunda cadena por “x”.

Vamos a extraer las cadenas que contengan alguna vocal, para ello, usamos la siguiente expresión, donde entre los corchetes, ponemos juntas las vocales:


=REGEXTEST(A1:A3;"[aeiou]")


Volvemos a filtrar.


=FILTRAR(A1:A3;REGEXTEST(A1:A3;"[aeiou]"))


Ya lo tenemos.

Dentro del argumento patrón, podemos poner más de una condición, por ejemplo, vamos a extraer las cadenas que contengan una vocal, y, un numero entre 5 y 9.

Nos devuelve:

Tenemos la siguiente cadena:

Queremos obtener la cadena sin la vocal “a” que hay, para ello, en la celda A7, usamos EXTRAE, como argumento texto, ponemos la celda A6, como argumento posición inicial, usamos la función SECUENCIA, como argumento filas, usamos LARGO, y, como argumento ponemos la celda A6, como argumento numero de caracteres, ponemos 1.


=EXTRAE(A6;SECUENCIA(LARGO(A6));1)

En la celda B7, ponemos la función REGEXTEST, como argumento texto, ponemos la celda A7 seguido del operador de rango derramado, como argumento patrón, ponemos comillas dobles, abrimos corchetes, ponemos “a+”, que nos devuelve 1 o más coincidencias, cerramos corchetes, cerramos comillas dobles.


=REGEXTEST(A7#;"[a+]")


Tenemos una matriz desbordada en vertical con VERDADERO donde hay coincidencia, y, FALSO donde no la hay.

Filtramos el rango A7:A13, como argumento include en la función REGEXTEST, e, igualamos a FALSO.


=FILTRAR(A7#;REGEXTEST(A7#;"[a+]")=FALSO)


Ya tenemos las letras sin contener la vocal “a”.


Después del signo igual, usamos la función UNIRCADENAS, como argumento delimitador, ponemos dobles comillas dobles, ignoramos celdas vacías, o, ignoramos el argumento, como argumento texto1, es la función FILTRAR.


=UNIRCADENAS("";VERDADERO;FILTRAR(A7#;REGEXTEST(A7#;"[a+]")=FALSO))


Tenemos la cadena sin la vocal “a”.

Ahora, tenemos los siguientes nombres:

Queremos extraer solo las letras, sean mayúsculas o minúsculas.


En la celda B2, ponemos LET, creamos una variable, usamos la función EXTRAE, como argumento texto, seleccionamos el rango A1:A9, como argumento posición inicial, usamos SECUENCIA, como argumento filas, ponemos LARGO, y, como argumento seleccionamos el rango A1:A9, como argumento numero de caracteres, ponemos 1.


=LET(a;EXTRAE(A1:A9;SECUENCIA(;MAX(LARGO(A1:A9)));1);a)


Obtenemos una matriz desbordada con cada carácter de cada cadena.

Creamos otra variable, usamos el condicional SI, como argumento prueba lógica, usamos la función REGEXTEST, como argumento texto, ponemos la variable “a”, como argumento patrón, ponemos comillas dobles, abrimos corchetes, ponemos a-zA-Z, cerramos corchetes, cerramos comillas dobles, cerramos paréntesis, como argumento valor si verdadero, ponemos la variable “a”, como argumento valor si falso, ponemos dobles comillas dobles.


=LET(a;EXTRAE(A1:A9;SECUENCIA(;MAX(LARGO(A1:A9)));1);b;SI(REGEXTEST(a;"[a-zA-Z]");a;"");b)

 

Ya tenemos las letras mayúsculas y minúsculas de cada cadena, y, blanco donde no hay coincidencia.

Usamos el argumento calculo de LET, usamos la función BYROW, como argumento array, ponemos la variable “b”, como argumento función, ponemos LAMBDA, declaramos una variable, como argumento cálculo de LAMBDA, usamos la función UNIRCADENAS, como argumento delimitador, ponemos dobles comillas dobles, ignoramos celdas vacías, como argumento texto1, ponemos la variable “x”.


=LET(a;EXTRAE(A1:A9;SECUENCIA(;MAX(LARGO(A1:A9)));1);b;SI(REGEXTEST(a;"[a-zA-Z]");a;"");BYROW(b;LAMBDA(x;UNIRCADENAS("";VERDADERO;x))))

 

Aceptamos, y, ya lo tenemos.

Función REGEXEXTRACT

Extrae texto de una cadena en función de una expresión regular, podemos extraer la primera o todas las coincidencias.


Sintaxis:

REGEXEXTRACT(texto, patrón, [return_mode], [case_sensitivity])


·        Texto. Argumento obligatorio, el texto o referencia a una celda que contiene el texto del que vamos a extraer.

·        Patrón, argumento obligatorio, es la expresión regular, es el patrón para extraer.

·        Return_mode. Argumento opcional, especifica las cadenas a extraer, el valor predeterminado es 0, que devuelve la primera coincidencia, 1 devuelve todas las cadenas con coincidencia, y, numero arábigo, que devuelve la captura de grupos de la primera coincidencia como una matriz.

·        case_sensitivity, argumento opcional, determina si debe de distinguir entre mayúsculas y minúsculas, de forma predeterminada, distingue entre mayúsculas y minúsculas, que es el valor 0, y, el valor 1, no distingue entre mayúsculas y minúsculas.

 

Veamos un ejemplo, tenemos la siguiente cadena:

En la celda B2, ponemos =REGEXEXTRACT(.


Como argumento texto, seleccionamos la celda A1, como argumento patrón, ponemos "[A-Z]+, el símbolo de “+”, quiere decir que va a buscar todas las veces que aparecen las letras entre la A y la Z, cerramos paréntesis.


=REGEXEXTRACT(A1;"[A-Z]+")


Nos devuelve la letra “J”.


Ahora tenemos la cadena JaimeJose, la expresión es la misma que la anterior, pero, añadimos el argumento return_mode, y, seleccionamos 1, es decir, que nos devuelva todas las coincidencias.


=REGEXEXTRACT(A2;"[A-Z]+";1)

 

Nos devuelve una matriz desbordada en vertical, y, en cada celda la letra J.

Volvemos a la celda A1, vamos a modificar la expresión, dentro del argumento patrón, añadimos [a-z], y, añadimos el argumento return_mode, y, ponemos igual a 1.


=REGEXEXTRACT(A1;"[A-Z][a-z]+";1)

 

Obtenemos otra matriz vertical con cada nombre.

Si usamos el argumento case_sensitivity, y, seleccionamos 1, es decir, que nos distinga entre mayúsculas y minúsculas, vamos a tener una copia de la celda A1.


=REGEXEXTRACT(A1;"[A-Z][a-z]+";1;1)

Función REGEXREPLACE

Reemplaza el texto de una cadena por otra cadena.


Sintaxis:

REGEXREPLACE(texto, patrón, reemplazo, [ocurrencia], [case_sensitivity])

 

·        Texto. Argumento obligatorio, texto o referencia a celda que deseamos reemplazar.

·        Patrón, argumento obligatorio, es el patrón que deseamos reemplazar.

·        Reemplazo. Argumento obligatorio, el texto por el que va a ser reemplazado el argumento patrón.

·        Ocurrencia. Argumento opcional, especifica que coincidencia vamos a reemplazar, de forma predeterminada, el valor es 0, que reemplaza todas las coincidencias.

·        case_sensitivity, argumento opcional, determina si debe de distinguir entre mayúsculas y minúsculas, de forma predeterminada, distingue entre mayúsculas y minúsculas, que es el valor 0, y, el valor 1, no distingue entre mayúsculas y minúsculas.

 

Podemos crear grupos, por ejemplo, tenemos los siguientes nombres, apellido1, y, apellido2.

Vamos a crear tres grupos, el primer grupo contendrá el nombre, el segundo grupo, el primer apellido, y, el tercer grupo el segundo apellido.


Hay que decir que, para crear un grupo, debemos de definir un patrón con paréntesis, y, hacemos referencia a un grupo a través del símbolo dólar ($).


En la celda B2, ponemos =REGEXREPLACE(.


Como argumento texto seleccionamos las celdas A1:A3, como argumento patrón, ponemos comillas dobles, abrimos paréntesis, ponemos corchetes, ponemos A-Z, cerramos corchetes, abrimos otros corchetes, ponemos a-z, cerramos corchetes, ponemos “+a”, cerramos paréntesis, en este momento acabamos de crear un grupo, para referirnos a él, debemos de poner $1 entre comillas dobles.


=REGEXREPLACE(A1:A3;"([A-Z][a-z]+)


Copiamos la expresión, excepto las comillas dobles, y, pegamos dos veces, cerramos comillas dobles, cerramos paréntesis.


=REGEXREPLACE(A1:A3;"([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)"

 

Como argumento replacement, entre comillas dobles, ponemos $1 para que nos devuelva el primer grupo.


=REGEXREPLACE(A1:A3;"([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)";"$1")

 

Aceptamos, y, obtenemos el nombre de cada celda.

Pero, quiero obtener el primer apellido, segundo apellido, y, nombre, para ello, en el argumento replacement, ponemos:


=REGEXREPLACE(A1:A3;"([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)";"$2 $3,$1")


Y ya lo tenemos.

Ahora tengo la siguiente cadena:

Quiero extraer solo las letras, en la celda B5, ponemos =REGEXREPLACE(.


Como argumento texto, ponemos la celda A5, como argumento patrón ponemos, "[0-9]", como argumento replacement, ponemos dobles comillas dobles.


=REGEXREPLACE(A5;"[0-9]";"")


Aceptamos, y, ya lo tenemos.



Miguel Angel Franco

8 visualizaciones0 comentarios

Comments


bottom of page