Dominando las Expresiones Regulares en Python
Las expresiones regulares (regex o regexp) son herramientas poderosas para la coincidencia de patrones dentro de cadenas. El módulo re
de Python proporciona una interfaz completa para trabajar con ellas, permitiendo la manipulación sofisticada de texto y la extracción de datos. Este tutorial lo guiará a través de las funciones y conceptos esenciales, permitiéndole aprovechar eficazmente el poder de las expresiones regulares en sus proyectos de Python.
Tabla de Contenido
re.match()
: Coincidencia al principiore.search()
: Encontrando la primera coincidenciare.compile()
: Optimizando el rendimiento- Flags: Modificando el comportamiento de coincidencia
- Conjuntos de caracteres: Definiendo los caracteres permitidos
- Búsqueda y reemplazo con
re.sub()
re.findall()
: Extrayendo todas las coincidenciasre.finditer()
: Iterando a través de las coincidenciasre.split()
: Dividiendo cadenas por patrón- Patrones básicos: Anclas, Clases de caracteres
- Repetición: Cuantificadores y coincidencia ávida vs. no ávida
- Secuencias especiales: Dígitos, espacios en blanco, caracteres de palabra
re.escape()
: Manejando caracteres especiales- Grupos de captura y el método
group()
1. re.match()
: Coincidencia al principio
La función re.match()
intenta hacer coincidir el patrón solo al principio de la cadena. Devuelve un objeto de coincidencia si tiene éxito, de lo contrario None
.
import re
text = "Hello World"
pattern = "Hello"
match = re.match(pattern, text)
if match:
print("Coincidencia encontrada:", match.group(0))
else:
print("No se encontró coincidencia")
2. re.search()
: Encontrando la primera coincidencia
re.search()
escanea toda la cadena en busca de la primera ocurrencia del patrón. A diferencia de re.match()
, no requiere que la coincidencia esté al principio.
import re
text = "Hello World"
pattern = "World"
match = re.search(pattern, text)
if match:
print("Coincidencia encontrada:", match.group(0))
else:
print("No se encontró coincidencia")
3. re.compile()
: Optimizando el rendimiento
Para un mejor rendimiento, especialmente con el uso repetido del mismo patrón, compílelo usando re.compile()
. Esto crea un objeto de patrón reutilizable.
import re
compiled_pattern = re.compile(r"d+") # Compilar el patrón
text1 = "Hay 123 manzanas"
text2 = "Y 456 naranjas"
match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)
print(match1.group(0)) # Salida: 123
print(match2.group(0)) # Salida: 456
4. Flags: Modificando el comportamiento de coincidencia
Los flags modifican el proceso de coincidencia. re.IGNORECASE
realiza una coincidencia sin distinción de mayúsculas y minúsculas, y re.MULTILINE
trata cada línea como una cadena separada para las anclas ^
y $
.
import re
text = "Hello world"
pattern = re.compile("hello", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0)) # Salida: Hello
5. Conjuntos de caracteres: Definiendo los caracteres permitidos
Los conjuntos de caracteres ([]
) especifican los caracteres permitidos. Por ejemplo, [a-z]
coincide con las letras minúsculas.
import re
text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0)) # Salida: abc
6. Búsqueda y reemplazo con re.sub()
re.sub()
reemplaza las ocurrencias de un patrón con una cadena de reemplazo.
import re
text = "Hello World"
new_text = re.sub("World", "Python", text)
print(new_text) # Salida: Hello Python
7. re.findall()
: Extrayendo todas las coincidencias
re.findall()
devuelve una lista de todas las coincidencias que no se superponen.
import re
text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers) # Salida: ['123', '456']
8. re.finditer()
: Iterando a través de las coincidencias
re.finditer()
devuelve un iterador, produciendo objetos de coincidencia. Más eficiente en cuanto a memoria para muchas coincidencias en cadenas grandes.
import re
text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
print(match.group(0)) # Salida: 123, 456 (en líneas separadas)
9. re.split()
: Dividiendo cadenas por patrón
re.split()
divide una cadena en función de un patrón.
import re
text = "manzana,plátano,cereza"
fruits = re.split(r",", text)
print(fruits) # Salida: ['manzana', 'plátano', 'cereza']
10. Patrones básicos: Anclas, Clases de caracteres
.
: Coincide con cualquier carácter excepto el salto de línea.^
: Coincide con el principio de la cadena.$
: Coincide con el final de la cadena.[]
: Coincide con un conjunto de caracteres (por ejemplo,[abc]
,[a-z]
).[^...]
: Coincide con cualquier carácter que *no* esté en el conjunto (conjunto de caracteres negado).
11. Repetición: Cuantificadores y coincidencia ávida vs. no ávida
*
: Cero o más ocurrencias.+
: Una o más ocurrencias.?
: Cero o una ocurrencia.{m}
: Exactamentem
ocurrencias.{m,n}
: Dem
an
ocurrencias.*?
,+?
,??
,{m,n}?
: Versiones no ávidas (coinciden con la cadena más corta posible).
12. Secuencias especiales: Dígitos, espacios en blanco, caracteres de palabra
d
: Coincide con cualquier dígito (0-9).D
: Coincide con cualquier carácter que no sea un dígito.s
: Coincide con cualquier carácter de espacio en blanco (espacio, tabulación, salto de línea).S
: Coincide con cualquier carácter que no sea un espacio en blanco.w
: Coincide con cualquier carácter alfanumérico (letras, números, guion bajo).W
: Coincide con cualquier carácter que no sea alfanumérico.
13. re.escape()
: Manejando caracteres especiales
re.escape()
escapa los caracteres especiales en una cadena, permitiéndole usarla como un patrón literal sin interpretaciones de regex no deseadas.
14. Grupos de captura y el método group()
Los paréntesis ()
crean grupos de captura. El método group()
accede a las subcadenas capturadas.
import re
text = "Mi número de teléfono es 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
area_code = match.group(1)
prefix = match.group(2)
line_number = match.group(3)
print(f"Código de área: {area_code}, Prefijo: {prefix}, Número de línea: {line_number}")
Este tutorial proporciona una base sólida en el módulo re
de Python. La exploración adicional de técnicas avanzadas mejorará significativamente sus capacidades de procesamiento de cadenas. Recuerde consultar la documentación oficial de Python para obtener una referencia completa.