Eliminazione dei caratteri corrispondenti a un pattern

Python:
Eliminazione dei caratteri corrispondenti a un pattern

Come fare:

import re

# Stringa di esempio
testo = "Ciao, Mondo! 1234"

# Rimuovi tutti i numeri
senza_numeri = re.sub(r'\d', '', testo)
print(senza_numeri)  # Output: "Ciao, Mondo! "

# Rimuovi la punteggiatura
senza_punteggiatura = re.sub(r'[^\w\s]', '', testo)
print(senza_punteggiatura)  # Output: "Ciao Mondo 1234"

# Rimuovi le vocali
senza_vocali = re.sub(r'[aeiouAEIOU]', '', testo)
print(senza_vocali)  # Output: "C, Mnd! 1234"

La mia funzione personalizzata

Faccio abbastanza spesso questo da averlo rifattorizzato in questa semplice funzione delete(). È anche una buona dimostrazione dei doctests:

def delete(stringa: str, regex: str) -> str:
    """
    >>> delete("Ciao, mondo!", "l")
    'Ciao, mondo!'

    >>> delete("Ciao, mondo!", "[a-z]")
    'C, !'
    """
    return re.sub(regex, "", stringa)

Approfondimento

La pratica di eliminare caratteri che corrispondono a un pattern in un testo ha radici profonde nell’informatica, risalendo agli strumenti Unix come sed e grep. In Python, il modulo re fornisce questa capacità, sfruttando le espressioni regolari - uno strumento potente e versatile per l’elaborazione del testo.

Alternative al modulo re includono:

  • Metodi delle stringhe come replace() per casi semplici.
  • Librerie di terze parti come regex per pattern più complessi e migliore supporto Unicode.

Sotto il cofano, quando si utilizza re.sub(), l’interprete Python compila il pattern in una serie di bytecode, processati da una macchina a stati che esegue il matching di pattern direttamente sul testo in input. Questa operazione può essere dispendiosa in termini di risorse per stringhe grandi o pattern complessi, quindi le considerazioni sulla performance sono cruciali per l’elaborazione di grandi dati.

Vedi Anche