Expresiones regulares en Python
Este artículo explica las expresiones regulares en Python.
Cubriremos una amplia gama de temas, desde el uso básico del módulo re hasta la coincidencia de patrones complejos con expresiones regulares.
YouTube Video
Expresiones regulares en Python
El módulo re se utiliza para buscar y manipular cadenas usando expresiones regulares.
¿Qué es el módulo re?
El módulo re está incluido en la biblioteca estándar de Python y proporciona funcionalidad para la manipulación de cadenas mediante expresiones regulares. Las expresiones regulares se utilizan para encontrar, extraer o reemplazar eficientemente patrones específicos de cadenas.
Patrones básicos de expresiones regulares
Las expresiones regulares definen patrones utilizando símbolos especiales. A continuación se muestran algunos patrones básicos.
.: Cualquier carácter único^: Inicio de una cadena$: Final de una cadena\d: Cualquier dígito (0-9)\w: Cualquier carácter alfanumérico (a-z, A-Z, 0-9, _)\s: Cualquier carácter de espacio en blanco*: Cero o más repeticiones+: Una o más repeticiones[]: Clase de caracteres (por ejemplo,[a-z]coincide con caracteres alfabéticos en minúsculas)
1import re
2
3pattern = r"\d{3}-\d{4}"
4text = "My postal code is 123-4567."
5result = re.search(pattern, text)
6if result:
7 print(result.group()) # Output: 123-4567
8
9# Define a pattern using basic regular expression symbols
10pattern = r"^\w+\s\d+\s[a-zA-Z]+$"
11
12# Example text to test the pattern
13text = "Room 23 Tokyo"
14
15# Check if the pattern matches the text
16result = re.match(pattern, text)
17if result:
18 print("Matched:", result.group())
19else:
20 print("No match")- Este código primero verifica si la cadena coincide con un patrón de código postal. A continuación, comprueba si toda la cadena (de principio a fin) coincide con un patrón compuesto por una palabra, espacio en blanco, dígitos, espacio en blanco y una palabra en inglés. Esto te ayuda a entender cómo se pueden combinar los elementos básicos de las expresiones regulares.
Cómo utilizar las funciones de coincidencia
re.match()
re.match() verifica si el inicio de la cadena coincide con el patrón especificado.
1import re
2
3pattern = r"\w+"
4text = "Python is powerful"
5match = re.match(pattern, text)
6if match:
7 print(match.group()) # Output: Python- Este código comprueba si la cadena comienza con un carácter de palabra (alfanumérico o guion bajo). La primera palabra 'Python' coincide con el patrón y se muestra.
re.search()
re.search() escanea toda la cadena y devuelve la primera coincidencia.
1import re
2
3pattern = r"powerful"
4text = "Python is powerful and versatile"
5search = re.search(pattern, text)
6if search:
7 print(search.group()) # Output: powerful- Este código busca en toda la cadena la palabra 'powerful' y devuelve la primera coincidencia. Como resultado,
re.search()muestra la cadena coincidente 'powerful'.
re.findall()
re.findall() devuelve todas las coincidencias del patrón como una lista.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.findall(pattern, text)
6print(matches) # Output: ['Python', 'strong']- Este código encuentra todas las palabras que tienen exactamente seis caracteres y las devuelve como una lista. 'Python' en la cadena cumple la condición y se muestra la lista
['Python'].
re.finditer()
re.finditer() devuelve todas las coincidencias como un iterador, lo que te permite obtener información detallada de cada coincidencia.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.finditer(pattern, text)
6for match in matches:
7 print(match.group()) # Output: Python- Este código busca secuencialmente todas las palabras de seis letras y procesa cada coincidencia mediante un iterador. 'Python' coincide con el patrón aquí y se muestra.
Reemplazo y División
re.sub()
re.sub() reemplaza las partes de la cadena que coinciden con la expresión regular por otra cadena.
1import re
2
3pattern = r"\d+"
4text = "There are 100 apples"
5new_text = re.sub(pattern, "many", text)
6print(new_text) # Output: There are many apples- Este código reemplaza todos los dígitos de la cadena por 'many'.
re.split()
re.split() divide la cadena en las partes que coinciden con la expresión regular.
1import re
2
3pattern = r"\s+"
4text = "Python is powerful"
5parts = re.split(pattern, text)
6print(parts) # Output: ['Python', 'is', 'powerful']- Este código divide la cadena por uno o más caracteres de espacio en blanco. Como resultado, la cadena se divide en palabras, obteniendo
['Python', 'is', 'powerful'].
Grupos y Capturas
Usar agrupación en expresiones regulares facilita extraer subcadenas coincidentes. Encerrar en paréntesis () lo captura como un grupo.
1import re
2
3pattern = r"(\d{3})-(\d{4})"
4text = "My postal code is 123-4567."
5match = re.search(pattern, text)
6if match:
7 print(match.group(1)) # Output: 123
8 print(match.group(2)) # Output: 4567- Este código extrae los números de 3 y 4 dígitos como grupos separados de un código postal con el formato '123-4567'.
group(1)devuelve los tres primeros dígitos '123', ygroup(2)devuelve los cuatro últimos dígitos '4567'.
Grupos con nombre
Usar grupos con nombre te permite recuperar valores por nombres significativos en lugar de depender de índices. A continuación se muestra un ejemplo concreto que extrae la fecha y el nivel de un registro.
1import re
2
3log = "2025-10-25 14:00:01 [ERROR] Something failed"
4
5pattern = r"(?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}) \[(?P<level>[A-Z]+)\] (?P<msg>.*)"
6m = re.search(pattern, log)
7if m:
8 print(m.group("date"), m.group("time"), m.group("level"))
9 print("message:", m.group("msg"))- Este código utiliza grupos con nombre para extraer la fecha, la hora, el nivel y el mensaje de una cadena de registro. Recupera los valores usando nombres significativos en lugar de índices.
Uso de Opciones de Banderas
El módulo re tiene varias opciones de banderas para controlar el comportamiento de búsqueda.
re.IGNORECASE(re.I): Una opción de bandera que hace que la coincidencia no distinga entre mayúsculas y minúsculas.re.MULTILINE(re.M): Una opción de bandera que permite la coincidencia a través de múltiples líneas.re.DOTALL(re.S): Una opción de bandera donde un punto.también coincide con caracteres de nueva línea.
1import re
2
3pattern = r"python"
4text = "Python is powerful"
5match = re.search(pattern, text, re.IGNORECASE)
6if match:
7 print(match.group()) # Output: Python- Este código busca la palabra 'python' sin distinguir mayúsculas de minúsculas. Al usar la bandera
re.IGNORECASE, también coincide con 'Python'.
Ventajas de los objetos de expresiones regulares (re.compile)
Compilar un patrón con re.compile hace más eficiente su reutilización y mejora la legibilidad. También puedes establecer banderas aquí.
El siguiente ejemplo busca repetidamente coincidencias en múltiples líneas usando un patrón compilado. Si usas el mismo patrón con frecuencia, compilarlo con re.compile mejora el rendimiento.
1import re
2
3pattern = re.compile(r"User: (\w+), ID: (\d+)")
4text = "User: alice, ID: 1\nUser: bob, ID: 2"
5
6for m in pattern.finditer(text):
7 print(m.groups())- Este código utiliza una expresión regular compilada para extraer nombres de usuario e identificadores a partir de múltiples líneas.
re.compilemejora la eficiencia al reutilizar el mismo patrón y también hace que el código sea más legible.
Aplicaciones
Por ejemplo, considere un script que extrae todas las direcciones de correo electrónico de un archivo de texto.
1import re
2
3pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
4text = "Contact us at info@example.com or support@service.com."
5emails = re.findall(pattern, text)
6print(emails) # Output: ['info@example.com', 'support@service.com']- Este código encuentra todas las direcciones de correo electrónico en la cadena y las extrae como una lista.
Conclusión
El módulo re es una herramienta poderosa para la manipulación de cadenas en Python. Aquí cubrimos un amplio espectro desde uso básico hasta expresiones regulares avanzadas utilizando grupos y opciones de banderas. Las expresiones regulares de Python son muy potentes y una herramienta indispensable para el procesamiento de texto.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.