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
a
busca 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|b
coincide 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
match
si 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
match
si 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
match
para 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.IGNORECASE
ore.I
: Ignora mayúsculas y minúsculas.re.MULTILINE
ore.M
: Permite que^
y$
coincidan al comienzo y al final de cada línea.re.DOTALL
ore.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.