Python Tutorials

Domina las Expresiones Regulares en Python

Spread the love

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

  1. re.match(): Coincidencia al principio
  2. re.search(): Encontrando la primera coincidencia
  3. re.compile(): Optimizando el rendimiento
  4. Flags: Modificando el comportamiento de coincidencia
  5. Conjuntos de caracteres: Definiendo los caracteres permitidos
  6. Búsqueda y reemplazo con re.sub()
  7. re.findall(): Extrayendo todas las coincidencias
  8. re.finditer(): Iterando a través de las coincidencias
  9. re.split(): Dividiendo cadenas por patrón
  10. Patrones básicos: Anclas, Clases de caracteres
  11. Repetición: Cuantificadores y coincidencia ávida vs. no ávida
  12. Secuencias especiales: Dígitos, espacios en blanco, caracteres de palabra
  13. re.escape(): Manejando caracteres especiales
  14. 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")

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}: Exactamente m ocurrencias.
  • {m,n}: De m a n 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *