Método Python re.compile()

Python re 模块Módulo Python re


re.compile()es Pythonreutilizado en el módulo paracompilar expresiones regularesla función.

Precompila el patrón de expresión regular en un objeto de expresión regular, que se puede reutilizar, mejorando la eficiencia de coincidencia.

Definición de la palabra: compilesignifica compilar, "Compile".


Sintaxis básica y parámetros

re.compile()Se utiliza para crear un objeto de expresión regular compilado.

Formato de sintaxis

re.compile(pattern, flags=0)

Descripción de parámetros

  • pattern:
    • Tipo: cadena (str)
    • Descripción: el patrón de expresión regular que se va a compilar.
  • flags:
    • Tipo: entero (int, opcional)
    • Descripción: banderas de expresión regular, comore.IGNORECASE、re.MULTILINEetc. Se puede usar|para combinar múltiples banderas.

Descripción de la función

  • Valor de retorno: Devuelve un objeto de expresión regular compilado (re.Patternobjeto).
  • Características: El objeto compilado se puede reutilizar, a diferencia de llamar cada vez are.search()funciones como re.match, que reanalizan la expresión regular; es más eficiente.

Ejemplo

Dominemos por completo, a través de una serie de ejemplos de simples a complejos,re.compile()el uso de.

Ejemplo 1: Uso básico - Compilar expresiones regulares

Ejemplo

import re

# Compilar una expresión regular
pattern = re.compile(r'\d+')

# Usar el objeto compilado para realizar la coincidencia
text = "Tengo 3 manzanas y 5 naranjas"

result = pattern.findall(text)

print("Números encontrados:", result)

Resultado esperado de la ejecución:

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

Análisis del código:

  1. re.compile(r'\d+')Compila una expresión regular que coincide con uno o más dígitos.
  2. El objeto devuelto tras la compilaciónpatterntiene métodosfindall()、search()、match()como findall, etc.
  3. Usar el objeto compilado para realizar la coincidencia es más eficiente.

Ejemplo 2: Usar el mismo patrón varias veces

La mayor ventaja de compilar expresiones regulares es que se pueden reutilizar, evitando análisis repetidos.

Ejemplo

import re

# Compilar una expresión regular para coincidir con correos electrónicos
email_pattern = re.compile(r'\w+@\w+\.\w+')

# Reutilizar en múltiples textos
texts = [
    "Contacte a [email protected] para obtener ayuda",
    "Correo: [email protected]",
    "Remitente: [email protected]"
]

for text in texts:
    result = email_pattern.search(text)
    if result:
        print(f"Correo encontrado: {result.group()}")

Resultado esperado de la ejecución:

找到邮箱: [email protected]
找到邮箱: [email protected]
找到邮箱: [email protected]

Análisis del código:

  • Se compila la expresión regular solo una vez y luego se reutiliza en múltiples textos.
  • El objeto compilado puede invocar varias vecessearch()、findall()métodos como search, etc.

Ejemplo 3: Uso de banderas

Al compilar se pueden especificar banderas de expresión regular para cambiar el comportamiento de coincidencia.

Ejemplo

import re

# Especificar la bandera de ignorar mayúsculas y minúsculas al compilar
pattern = re.compile(r'python', re.IGNORECASE)

text = "Python is great, PYTHON is powerful"

# Usar el objeto compilado para buscar
result = pattern.findall(text)

print("Encontrado:", result)

Resultado esperado de la ejecución:

找到: ['Python', 'PYTHON']

Análisis del código:

  • re.IGNORECASEHace que la coincidencia no distinga entre mayúsculas y minúsculas.
  • Al especificar la bandera en la compilación, todas las operaciones que usen este objeto aplicarán dicha bandera.

Ejemplo 4: Uso de grupos

El objeto compilado puede usar grupos para extraer contenido específico.

Ejemplo

import re

# Compilar la expresión regular usando grupos
pattern = re.compile(r'(\d{3})-(\d{4})-(\d{4})')

text = "Zhang San: 138-1234-5678, Li Si: 139-9876-5432"

# Buscar todas las coincidencias
results = pattern.findall(text)

for result in results:
    print(f"Completo: {result)
    print(f" Grupo 1 (primeros 3 dígitos): {result)
    print(f" Grupo 2 (4 dígitos del medio): {result)
    print(f" Grupo 3 (últimos 4 dígitos): {result)

Resultado esperado de la ejecución:

完整: 138-1234-5678
  第1组(前3位): 138
  第2组(中间4位): 1234
  第3组(后4位): 5678
完整: 139-9876-5432
  第1组(前3位): 139
  第2组(中间4位): 9876
  第3组(后4位): 5432

Análisis del código:

  • Los paréntesis()crean tres grupos.
  • findall()Devuelve una lista de tuplas, cada tupla contiene el contenido de cada grupo.

Ejemplo 5: Atributos del objeto compilado

El objeto de expresión regular compilado tiene algunos atributos útiles.

Ejemplo

import re

# Compilar la expresión regular
pattern = re.compile(r'\d+', re.IGNORECASE | re.MULTILINE)

print("Patrón:", pattern.pattern)
print("Banderas:", pattern.flags)
print("Número de grupos:", pattern.groups)
print("Nombres de grupos:", pattern.groupindex)

Resultado esperado de la ejecución:

模式: \d+
标志: 50
分组数: 1
分组名: {}

Análisis del código:

  • pattern.pattern- Devuelve la cadena del patrón original.
  • pattern.flags- Devuelve el valor entero de las banderas.
  • pattern.groups- Devuelve el número de grupos.
  • pattern.groupindex- Devuelve un diccionario de los grupos con nombre.

Ejemplo 6: Comparación con las funciones del módulo re

Ejemplo

import re

text = "ABC123DEF"

# Método 1: Usar directamente las funciones del módulo re
result1 = re.search(r'\d+', text)

# Método 2: Compilar primero y luego usar el objeto compilado
pattern = re.compile(r'\d+')
result2 = pattern.search(text)

print("re.search():", result1.group())
print("pattern.search():", result2.group())

# Ambos métodos dan el mismo resultado, pero el objeto compilado se puede reutilizar

Resultado esperado de la ejecución:

re.search(): 123
pattern.search(): 123

Análisis del código:

  • El resultado de ambos métodos es el mismo.
  • Cuando se necesita usar el mismo patrón varias veces, se recomiendare.compile()compilar de antemano.

Python re 模块Módulo Python re

Otras extensiones