Método Python re.compile()
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, como
re.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 a
re.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
# 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:
re.compile(r'\d+')Compila una expresión regular que coincide con uno o más dígitos.- El objeto devuelto tras la compilación
patterntiene métodosfindall()、search()、match()como findall, etc. - 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
# 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 veces
search()、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
# 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
# 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
# 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
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 recomienda
re.compile()compilar de antemano.
Otras extensiones
Módulo Python re