Skip to main content

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

  1. 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.

  2. 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.
  3. 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.
  4. 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

  1. Buscar una palabra específica:

    • Expresión: hola
    • Coincide con: "hola mundo", "dijo hola"
  2. 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"
  3. Buscar direcciones de correo electrónico:

  4. Buscar palabras que comiencen con una mayúscula:

    • Expresión: \b[A-Z][a-z]*\b
    • Coincide con: "Hola Mundo", "Esta es una prueba"

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

  1. re.match()

    • Busca un patrón al comienzo de una cadena.
    • Retorna un objeto match si encuentra coincidencia; de lo contrario, retorna None.
    resultado = re.match(r'abc', 'abcdef')
    if resultado:
    print("Coincidencia encontrada:", resultado.group())
  2. re.search()

    • Busca un patrón en cualquier parte de la cadena.
    • Retorna un objeto match si encuentra coincidencia; de lo contrario, retorna None.
    resultado = re.search(r'abc', '123abcdef')
    if resultado:
    print("Coincidencia encontrada:", resultado.group())
  3. 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)
  4. 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())
  5. 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

  1. 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')
  2. 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)
  3. 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 o re.I: Ignora mayúsculas y minúsculas.
  • re.MULTILINE o re.M: Permite que ^ y $ coincidan al comienzo y al final de cada línea.
  • re.DOTALL o re.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:

  1. Leer el contenido del archivo.
  2. Validar que cada bloque de información contiene un nombre, un correo y un teléfono válidos.
  3. Extraer y mostrar los nombres, correos y teléfonos.