Blog
En programación, las expresiones regulares se refieren a patrones de caracteres principalmente utilizadas para encontrar cierta combinación dentro de una cadena de texto.
Generalmente es utilizado para validar la entrada de datos en un formulario; por ejemplo, cuando necesitamos que el usuario introduzca número de teléfono, email, fecha o algún otro dato que requiera un formato específico para ser admitido.
Teniendo presente la ventaja de usar expresiones regulares al programar, explicaremos a continuación como se emplean en Python.
Construcción de una expresión regular
Antes de abordar el tema, hemos de tomar en consideración como se construye una expresión regular:
Alternación |
Haciendo uso de la barra vertical podemos separar alternativas de algún argumento.
Ejemplo, la alternación “Blanco|Negro”, representa “Blanco o Negro”.
Cuantificación ?, + , *,{}
Con relación a la cuantificación, esta indica la frecuencia del carácter que lo precede, es decir el carácter que se encuentra a la izquierda del símbolo.
-
- ?: aparece una vez o en su defecto ninguna.
Cart?a: Únicamente dos series coincidirán con esta sintaxis: “Carta” y “Cara”.
-
- +: aparece al menos una vez.
Camill+a: Coincidirá “Camila” y “Camilla”
-
- *: aparece varias veces o Ninguna.
O*la: la, ola, oola, ooola
hola*: hol, hola, holaa, holaaa
-
- {}: dentro de las llaves se escribe las veces que aparece el carácter.
{n} n veces
{n1,n2} desde N1 a N2
{ ,n} desde cero a N2
{n,} desde N en adelante
Agrupación ( ), [ ]
-
- ():El paréntesis es el operador de grupo con el cual podemos buscar una serie específica antes o después de cada miembro del grupo; se puede utilizar en combinación con los operadores antes visto.
“(p|a)dre”: puede ser padre o madre
“(sub)?marino”: submarino o marino
-
- []: representa clases de caracteres; es decir los agrupa en clases
“acci[oó]n” encontrará “accion” o “acción”.
Escapes de carácter \
La barra invertida se utiliza siempre en combinación con otros caracteres.
-
- \t: tabulador.
- \r: “retorno de carro” o “regreso al inicio”; en otras palabras, el lugar en que la línea vuelve a iniciar.
- \n: “nueva línea”, con este carácter damos inicio a una nueva línea.
- \f: salto de página
- \v: tabulador vertical
- \x: representación hexadecimal de caracteres ASCII o ANSI. Consta de exactamente dos dígitos, ejemplo \x40 código hexadecimal del arroba “@”.
- \u: caracteres Unicode si se conoce su código. “\u00A2” representa el símbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode.
- \d: un dígito del 0 al 9.
- \w: cualquier carácter alfanumérico (a-z, A-Z, 0-9 o guion bajo).
- \s: espacio en blanco.
- \D: cualquier carácter que no sea un dígito del 0 al 9.
- \W: cualquier carácter no alfanumérico.
- \S: cualquier carácter que no sea un espacio en blanco.
- \A: inicio de una cadena. No es un carácter sino una posición.
- \Z: final de una cadena. No es un carácter sino una posición.
- \b: marca el inicio y final de una palabra.
- \B: marca la posición entre dos caracteres alfanuméricos o no-alfanuméricos.
Expresiones regulares en Python (módulo Re)
Como hemos visto hasta ahora las expresiones regulares usan caracteres específicos para indicar formas especiales o permitir el uso de ciertos caracteres especiales; sin embargo, para poder trabajar con ellas en Python necesitaremos diversas funciones contenidas en el módulo “re”. Veamos algunas:
Función match()
Con la función match podemos comprobar si una expresión regular coincide con el inicio de una cadena.
Sintaxis:
match(expresiónregular, cadena, [flag])
Valores en Flag:
re.IGNORECASE: no distingue entre mayúsculas y minúsculas.
Re.VERBOSE: ignora comentaros y espacios en la expresión.
Ejemplo:
import re palabra1 = 'taza' palabra2 = 'tazas' palabra3 = 'casa' if re.match(palabra1, palabra2): print('palabra1 y palabra2 coinciden') else: print('palabra1 y palabra2 no coinciden') if re.match(palabra1, palabra3): print('palabra1 y palabra3 coinciden') else: print('palabra1 y palabra3 no coinciden')
Comodines:
En la función match, el punto representa cualquier carácter a excepción de \n.
import re palabra1 = 'taza' if re.match('.aza', palabra1): print('palabra1 termina en aza') else: print('palabra1 no termina en aza')
Carácter especial:
Los caracteres especiales que queremos validar debemos escribirla luego de una barra invertida “\”.
import re ext = '\.pdf' if re.match(ext, '.pdf') != None: print('El archivo es de formato pdf')
Alternativas:
El ejemplo anterior valida solamente si el archivo es pdf, pero existen muchos más formatos.
Bien podríamos seguir utilizando condicionales por cada extensión, pero resulta mucho más eficiente utilizar la barra vertical para elegir entre varias alternativas.
import re extensiones = ['pdf', 'jpg', 'doc', 'txt', 'flv'] for tipoarchivo in extensiones: if re.match('pdf|doc|txt', tipoarchivo): print('La extensión ', tipoarchivo, ' es un formato de texto') else: print('La extensión ', tipoarchivo, 'no es un formato de texto')
Agrupación:
El paréntesis hace posible aislar un grupo de caracteres.
import re palabras = ['computadora', 'compañera', 'compota', 'compara', 'camisa', 'compromiso'] for termino in palabras: if re.match('com(...|.)a', termino): print(termino)
Caracteres predefinidos
Con estos caracteres podemos validar cadenas
\d Cualquier carácter que sea dígito
\D Cualquier carácter que no sea dígito
\w Cualquier carácter alfanumérico
\W Cualquier carácter no alfanumérico
\s Espacio en blanco
\S Cualquier carácter que no sea espacio
import re codigo = 'cod1' if re.match('...\d', codigo): print("Es una cadena válida porque termina con un digito") else: print("No es una cadena válida porque termina con un digito")
import re codigo = "@cod" if re.match('\W', codigo): print ('Es una cadena valida porque comienza con carácter no alfanumérico') else: print ('no es una cadena valida porque no comienza con carácter no alfanumérico')
[…] enfoque podría ser usar la librería de expresiones regulares regex (re) y dividir el documento en palabras seleccionando las cadenas de caracteres […]
[…] Podemos filtrar la puntuación de los tokens usando expresiones regulares. […]
[…] enfoque podría ser usar la librería de expresiones regulares regex (re) y dividir el documento en palabras seleccionando las cadenas de caracteres […]