Expresiones regulares
Las expresiones regulares, a menudo conocidas por su abreviatura regex (del inglés "regular expressions"), son secuencias de caracteres que forman un patrón de búsqueda. Este patrón puede ser utilizado para realizar operaciones de búsqueda y manipulación de texto, como encontrar, sustituir, o extraer partes específicas de un texto en cadenas de caracteres. Son herramientas muy poderosas en la programación y en la manipulación de datos.
Conceptos Básicos de Expresiones Regulares
-
Literal: Un carácter normal que se busca en el texto. Por ejemplo, la expresión regular
abusca la letra "a" en el texto. -
Metacaracteres: Son caracteres con un significado especial en las expresiones regulares. Algunos de los metacaracteres más comunes incluyen:
.: Representa cualquier carácter excepto una nueva línea.^: Indica el inicio de una línea.$: Indica el final de una línea.*: Coincide con cero o más repeticiones del carácter anterior.+: Coincide con una o más repeticiones del carácter anterior.?: Coincide con cero o una repetición del carácter anterior.[]: Define un conjunto de caracteres, por ejemplo,[abc]coincide con "a", "b" o "c".|: Actúa como un operador OR, por ejemplo,a|bcoincide con "a" o "b".(): Agrupa caracteres o expresiones.
-
Cuantificadores: Especifican el número de veces que un elemento puede aparecer:
{n}: Exactamente n repeticiones.{n,}: Al menos n repeticiones.{n,m}: Entre n y m repeticiones.
-
Clases de caracteres predefinidas:
\d: Cualquier dígito (equivalente a[0-9]).\D: Cualquier carácter que no sea un dígito.\w: Cualquier carácter alfanumérico (equivalente a[a-zA-Z0-9_]).\W: Cualquier carácter no alfanumérico.\s: Cualquier carácter de espacio en blanco (espacios, tabulaciones, nuevas líneas).\S: Cualquier carácter que no sea un espacio en blanco.
Ejemplos de Uso
-
Buscar una palabra específica:
- Expresión:
hola - Coincide con: "hola mundo", "dijo hola"
- Expresión:
-
Buscar un número de teléfono en el formato
123-456-7890:- Expresión:
\d{3}-\d{3}-\d{4} - Coincide con: "Llámame al 123-456-7890"
- Expresión:
-
Buscar direcciones de correo electrónico:
- Expresión:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} - Coincide con: "contacto@example.com"
- Expresión:
-
Buscar palabras que comiencen con una mayúscula:
- Expresión:
\b[A-Z][a-z]*\b - Coincide con: "Hola Mundo", "Esta es una prueba"
- Expresión:
Aplicaciones Comunes
- Validación de datos: Comprobación de formatos de entrada, como correos electrónicos, números de teléfono, códigos postales, etc.
- Búsqueda y reemplazo: En editores de texto, scripts de procesamiento de texto, etc.
- Extracción de datos: Extraer partes específicas de textos, como fechas, nombres, etc.
Las expresiones regulares son una herramienta esencial para desarrolladores y analistas de datos, proporcionando una manera eficiente de manejar y manipular texto. Aunque pueden parecer complejas al principio, su dominio permite realizar tareas de procesamiento de texto de manera rápida y eficaz.
En Python
Usar expresiones regulares en Python es bastante sencillo gracias al módulo re que proporciona varias funciones útiles para trabajar con regex. A continuación, se presentan los conceptos y funciones más comunes para trabajar con expresiones regulares en Python.
Importar el Módulo re
Para usar expresiones regulares en Python, primero debes importar el módulo re:
import re
Funciones Comunes
-
re.match()- Busca un patrón al comienzo de una cadena.
- Retorna un objeto
matchsi encuentra coincidencia; de lo contrario, retornaNone.
resultado = re.match(r'abc', 'abcdef')
if resultado:
print("Coincidencia encontrada:", resultado.group()) -
re.search()- Busca un patrón en cualquier parte de la cadena.
- Retorna un objeto
matchsi encuentra coincidencia; de lo contrario, retornaNone.
resultado = re.search(r'abc', '123abcdef')
if resultado:
print("Coincidencia encontrada:", resultado.group()) -
re.findall()- Retorna una lista de todas las coincidencias del patrón en la cadena.
resultados = re.findall(r'\d+', 'La dirección es 1234 y el código postal es 56789')
print("Coincidencias encontradas:", resultados) -
re.finditer()- Retorna un iterador que produce objetos
matchpara todas las coincidencias del patrón en la cadena.
resultados = re.finditer(r'\d+', 'La dirección es 1234 y el código postal es 56789')
for resultado in resultados:
print("Coincidencia encontrada:", resultado.group()) - Retorna un iterador que produce objetos
-
re.sub()- Sustituye todas las coincidencias de un patrón en la cadena con un reemplazo especificado.
texto_modificado = re.sub(r'\d+', '#', 'La dirección es 1234 y el código postal es 56789')
print("Texto modificado:", texto_modificado)
Ejemplos Prácticos
-
Validación de un correo electrónico:
def validar_correo(correo):
patron = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if re.match(patron, correo):
print("Correo válido")
else:
print("Correo inválido")
validar_correo('ejemplo@dominio.com') -
Extracción de números de un texto:
texto = "Mi número de teléfono es 123-456-7890 y mi código postal es 98765."
numeros = re.findall(r'\d+', texto)
print("Números encontrados:", numeros) -
Reemplazo de todas las vocales en un texto:
texto = "Este es un texto de ejemplo."
texto_modificado = re.sub(r'[aeiou]', '*', texto)
print("Texto modificado:", texto_modificado)
Uso de Objetos Pattern
Para mejorar la eficiencia, especialmente si necesitas usar el mismo patrón varias veces, puedes compilar las expresiones regulares en objetos Pattern:
patron = re.compile(r'\d+')
resultados = patron.findall('Mi número es 12345 y mi código postal es 67890')
print("Números encontrados:", resultados)
Flags (Banderas)
Las banderas se pueden usar para modificar el comportamiento de las expresiones regulares. Algunas banderas comunes son:
re.IGNORECASEore.I: Ignora mayúsculas y minúsculas.re.MULTILINEore.M: Permite que^y$coincidan al comienzo y al final de cada línea.re.DOTALLore.S: Hace que.coincida con cualquier carácter, incluyendo nuevas líneas.
Ejemplo con bandera:
texto = "Hola Mundo\nHola Python"
resultados = re.findall(r'^Hola', texto, re.MULTILINE)
print("Coincidencias encontradas:", resultados)
Conclusión
Las expresiones regulares son herramientas poderosas para manipular texto, y Python proporciona un conjunto robusto de funciones a través del módulo re para trabajar con ellas de manera efectiva. Con práctica, puedes aprender a usar estas funciones para resolver una amplia variedad de problemas relacionados con el procesamiento de texto.
Ejercicio
Ejercicio: Validar y Extraer Información de un Archivo de Texto
Descripción
Tienes un archivo de texto que contiene información de varias personas en el siguiente formato:
Nombre: Juan Pérez
Correo: juan.perez@example.com
Teléfono: 123-456-7890
---
Nombre: María Gómez
Correo: maria.gomez@example.net
Teléfono: 987-654-3210
---
El objetivo del ejercicio es:
- Leer el contenido del archivo.
- Validar que cada bloque de información contiene un nombre, un correo y un teléfono válidos.
- Extraer y mostrar los nombres, correos y teléfonos.