Módulo re de Python

de PythonreEl módulo es un módulo de la biblioteca estándar para manejar expresiones regulares.

Una expresión regular (Regular Expression, abreviada como regex o regexp) es una herramienta poderosa para hacer coincidir, buscar y manipular texto.

A través delremódulo, puedes usar expresiones regulares en Python para procesar cadenas.

¿Por qué usar el módulo re?

Al procesar texto, a menudo necesitamos buscar patrones específicos o reemplazar ciertos caracteres. Por ejemplo, validar direcciones de correo electrónico, extraer enlaces de páginas web o formatear texto. Escribir código manualmente para completar estas tareas puede ser muy tedioso, mientras que las expresiones regulares ofrecen una forma concisa y eficiente de resolver estos problemas.


Uso básico del módulo re

1. Importar el módulo re

Antes de usarreel módulo, primero debes importarlo:

import re

2. Funciones comunes del módulo re

2.1 re.match()

re.match()La función se utiliza para hacer coincidir la expresión regular desde el inicio de la cadena. Si la coincidencia es exitosa, devuelve un objeto de coincidencia; de lo contrario, devuelveNone。

Ejemplo

import re

pattern = r"hello"
text = "hello world"

match = re.match(pattern, text)
if match:
    print("Coincidencia exitosa:", match.group())
else:
    print("Coincidencia fallida")

Salida:

匹配成功: hello

2.2 re.search()

re.search()La función se utiliza para buscar la primera coincidencia de la expresión regular en la cadena. En comparación conre.match()diferente,re.search()no requiere que la coincidencia comience desde el inicio de la cadena.

Ejemplo

import re

pattern = r"world"
text = "hello world"

match = re.search(pattern, text)
if match:
    print("Coincidencia exitosa:", match.group())
else:
    print("Coincidencia fallida")

Salida:

匹配成功: world

2.3 re.findall()

re.findall()La función se utiliza para buscar todas las subcadenas que coinciden con la expresión regular en la cadena y devuelve una lista.

Ejemplo

import re

pattern = r"\d+"
text = "There are 3 apples and 5 oranges."

matches = re.findall(pattern, text)
print("Números encontrados:", matches)

Salida:

找到的数字: ['3', '5']

2.4 re.sub()

re.sub()La función se utiliza para reemplazar las partes de la cadena que coinciden con la expresión regular.

Ejemplo

import re

pattern = r"apple"
text = "I have an apple."

new_text = re.sub(pattern, "banana", text)
print("Texto después del reemplazo:", new_text)

Salida:

替换后的文本: I have an banana.

Sintaxis básica de las expresiones regulares

1. Caracteres normales

Los caracteres normales (como letras, números) coinciden directamente consigo mismos.

Ejemplo

import re

pattern = r"cat"
text = "The cat is on the mat."

match = re.search(pattern, text)
if match:
    print("Coincidencia exitosa:", match.group())

Salida:

匹配成功: cat

2. Caracteres especiales

En las expresiones regulares hay algunos caracteres especiales que tienen significados especiales. Por ejemplo:

  • .: coincide con cualquier carácter individual (excepto el salto de línea).
  • *: coincide con el carácter anterior cero o más veces.
  • +: coincide con el carácter anterior una o más veces.
  • ?: coincide con el carácter anterior cero o una vez.
  • \d: coincide con cualquier dígito (equivalente a[0-9])。
  • \w: coincide con cualquier letra, dígito o guion bajo (equivalente a[a-zA-Z0-9_])。

Ejemplo

import re

pattern = r"\d+"
text = "The price is 100 dollars."

match = re.search(pattern, text)
if match:
    print("Coincidencia exitosa:", match.group())

Salida:

匹配成功: 100

3. Conjuntos de caracteres

Un conjunto de caracteres se utiliza para coincidir con cualquiera de un grupo de caracteres. Por ejemplo,[abc]coincide cona、boc。

Ejemplo

import re

pattern = r"[aeiou]"
text = "Hello World!"

matches = re.findall(pattern, text)
print("Vocales encontradas:", matches)

Salida:

找到的元音字母: ['e', 'o', 'o']

4. Grupos

Los grupos te permiten combinar varios caracteres y operar sobre ellos. Por ejemplo,(abc)coincide conabc。

Ejemplo

import re

pattern = r"(ab)+"
text = "ababab"

match = re.search(pattern, text)
if match:
    print("Coincidencia exitosa:", match.group())

Salida:

匹配成功: ababab

Ejercicios prácticos

Ejercicio 1: Validar una dirección de correo electrónico

Escribe una expresión regular para validar el formato de una dirección de correo electrónico.

Ejemplo

import re

pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
email = "[email protected]"

if re.match(pattern, email):
    print("Dirección de correo electrónico válida")
else:
    print("Dirección de correo electrónico inválida")

Ejercicio 2: Extraer números de teléfono

Escribe una expresión regular para extraer números de teléfono de un texto.

Ejemplo

import re

pattern = r"\d{3}-\d{3}-\d{4}"
text = "My phone number is 123-456-7890."

match = re.search(pattern, text)
if match:
    print("Números de teléfono encontrados:", match.group())

1. Funciones principales

Método Descripción Ejemplo
re.compile(pattern) Precompilar la expresión regular (mejora el rendimiento de reutilización) pat = re.compile(r'\d+')
re.search(pattern, string) Busca la primera coincidencia en la cadena re.search(r'\d+', 'a1b2')→ coincide'1'
re.match(pattern, string) Coincide desde el inicio de la cadena re.match(r'\d+', '123a')→ coincide'123'
re.fullmatch(pattern, string) Coincide con toda la cadena re.fullmatch(r'\d+', '123')→ coincide'123'
re.findall(pattern, string) Devuelve una lista de todas las coincidencias no superpuestas re.findall(r'\d+', 'a1b22c') → ['1', '22']
re.finditer(pattern, string) Devuelve un iterador de todas las coincidencias (incluye información de posición) for m in re.finditer(r'\d+', 'a1b2'): print(m.group())
re.sub(pattern, repl, string) Reemplaza las coincidencias re.sub(r'\d+', 'X', 'a1b2') → 'aXbX'
re.split(pattern, string) Divide la cadena según las coincidencias re.split(r'\d+', 'a1b2c') → ['a', 'b', 'c']
re.escape() Escapa caracteres especiales re.escape("C:\\Users\\test.txt")
re.purge() Limpia la caché re.purge()

2. Objeto de coincidencia (Match) métodos/atributos

Método/Atributo Descripción Ejemplo
group() Devuelve la cadena completa de la coincidencia m.group() → 'abc'
group(n) Devuelve el contenido del grupo de captura n m = re.search(r'(\d)(\d)', '12'); m.group(1) → '1'
groups() Devuelve una tupla con todos los grupos de captura m.groups() → ('1', '2')
start()/end() Posición de inicio/fin de la coincidencia m.start() → 0
span() Devuelve el rango de la coincidencia(start, end) m.span() → (0, 2)

3. Metacaracteres de expresiones regulares (parcial)

Metacaracter Descripción Ejemplo de coincidencia
. Coincide con cualquier carácter (excepto salto de línea) a.c → 'abc'
\d Coincide con un dígito \d+ → '123'
\D Coincide con un no dígito \D+ → 'abc'
\w Coincide con un carácter de palabra (letra, dígito, guion bajo) \w+ → 'Ab_1'
\W Coincide con un carácter que no es de palabra \W+ → '!@#'
\s Coincide con un carácter de espacio en blanco (espacio, tabulador, etc.) \s+ → ' \t'
\S Coincide con un carácter que no es espacio en blanco \S+ → 'abc'
[] Conjunto de caracteres [A-Za-z]→ cualquier letra
^ Coincide con el inicio de la cadena ^\d+→ dígito al inicio
$ Coincide con el final de la cadena \d+$→ dígito al final
* Coincide con el carácter anterior 0 o más veces a* → '', 'aaa'
+ Coincide con el carácter anterior 1 o más veces a+ → 'a', 'aaa'
? Coincide con el carácter anterior 0 o 1 vez a? → '', 'a'
{m,n} Coincide con el carácter anterior de m a n veces a{2,3} → 'aa', 'aaa'
| Operación "o" cat|dog → 'cat'o'dog'
() Grupo de captura (\d+)→ extraer dígitos

4. Banderas de compilación (flagsparámetros)

Bandera Descripción Ejemplo
re.IGNORECASE (re.I) Ignorar mayúsculas y minúsculas re.search(r'abc', 'ABC', re.I)
re.MULTILINE (re.M) Modo multilínea (afecta a^y$) re.findall(r'^\d+', '1\n2', re.M) → ['1', '2']
re.DOTALL (re.S) Dejar.Coincide con todos los caracteres, incluidos los saltos de línea re.search(r'a.*b', 'a\nb', re.S)
re.ASCII Dejar\w, \Wetc. coinciden solo con caracteres ASCII re.search(r'\w+', 'こん', re.ASCII)→ sin coincidencia
re.VERBOSE (re.X) Permite agregar comentarios y espacios en la expresión regular re.compile(r'''\d+ # 匹配数字''', re.X)

Ejemplo

1. Extraer direcciones de correo electrónico

Ejemplo

import re

text = "Contact: [email protected], [email protected]"
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text)
print(emails)  # Salida: ['[email protected]', '[email protected]']

2. Reemplazar formato de fecha

Ejemplo

date_str = "Today is 05-15-2023"
new_str = re.sub(r'(\d{2})-(\d{2})-(\d{4})', r'\3año\1mes\2día', date_str)
print(new_str)  # Salida: "Hoy es 15 de mayo de 2023"

3. Coincidencia con múltiples condiciones

Ejemplo

pattern = re.compile(r'''
    ^(?P<username>\w+) # Nombre de usuario
    :(?P<password>\S+) # Contraseña
    @(?P<domain>\w+\.\w+) # Dominio
$'''
, re.VERBOSE)

m = pattern.match("john:[email protected]")
if m:
    print(m.groupdict())  # Salida: {'username': 'john', 'password': 'pass123', 'domain': 'example.com'}

4. Dividir cadenas complejas

Ejemplo

text = "Apple1Banana2Cherry3Date"
parts = re.split(r'\d+', text)
print(parts)  # Salida: ['Apple', 'Banana', 'Cherry', 'Date']

Notas

  1. Cadena sin procesar: se recomienda usar cadenas sin procesar para las expresiones regulares (r'\d'), para evitar conflictos de caracteres de escape.

  2. Coincidencia codiciosa: la coincidencia codiciosa es la predeterminada (por ejemplo,.*coincidirá con la longitud máxima posible), se necesita usar.*?para implementar la coincidencia no codiciosa.

  3. Optimización de rendimiento: las expresiones regulares de uso frecuente deben priorizar el uso dere.compile()precompilación.

  4. Problema de retroceso: las expresiones regulares complejas pueden causar problemas de rendimiento (como cuantificadores anidados(a+)+)。

Otras extensiones