HOWTO · Python
Rimuovi alcuni caratteri dalla stringa in Python
Questo tutorial mostra come rimuovere determinati caratteri da una stringa in Python
In questa pagina
Usa str.replace() per rimuovere una sottostringa nota, str.translate() per eliminare più caratteri singoli, una comprehension per conservare i caratteri che soddisfano una condizione oppure re.sub() quando i caratteri da rimuovere sono descritti da un pattern. Ogni approccio restituisce una nuova stringa: le stringhe Python sono immutabili, quindi il valore originale resta disponibile. Tutti e quattro gli esempi seguenti sono stati eseguiti correttamente e ciascuno ha stampato Hello World.
Rimuovere caratteri selezionati con str.replace()
str.replace(old, new) sostituisce le occorrenze di una sottostringa con un’altra. Usa "" come sostituzione per eliminarla. È una soluzione chiara quando gli elementi da rimuovere sono pochi e noti; per un piccolo insieme puoi ripetere la chiamata.
Questo esempio rimuove due sottostringhe note da un saluto:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
source = "Hello, World!"
cleaned = source.replace(",", "").replace("!", "")
print(cleaned)
Le chiamate rimuovono virgole e punti esclamativi ovunque compaiano. Non modificano source: assegna il valore restituito a una variabile se il codice successivo deve usare il testo ripulito. replace() rimuove anche sottostringhe note più lunghe; usalo quindi quando l’elemento da rimuovere è una parola o una sequenza, non soltanto un singolo carattere. Per un elenco più lungo di caratteri singoli, una tabella di traduzione o un filtro sono più facili da mantenere.
Rimuovere più caratteri con str.translate()
Usa str.maketrans() con il terzo argomento per creare una tabella di eliminazione per un insieme di caratteri singoli. Passa poi la tabella a str.translate(). Ogni carattere indicato viene rimosso in tutte le sue occorrenze; questo metodo non individua sottostringhe arbitrarie composte da più caratteri.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
source = "Hello, World!"
remove_chars = ",!"
table = str.maketrans("", "", remove_chars)
cleaned = source.translate(table)
print(cleaned)
Modifica remove_chars per scegliere quali caratteri eliminare. È una soluzione adatta quando la regola consiste in un insieme fisso di caratteri. str.maketrans() può anche specificare sostituzioni di caratteri, ma il terzo argomento contrassegna specificamente quelli da eliminare. Se la regola dipende da una condizione, usa invece un filtro.
Filtrare i caratteri e unire il risultato
Una comprehension rende esplicita la regola di conservazione: scorre l’input e mantiene un carattere solo se non appartiene all’insieme da rimuovere. Poi chiama str.join() sulla stringa separatrice per unire i caratteri conservati. La separatrice vuota mostrata qui li concatena senza aggiungere testo.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
source = "Hello, World!"
remove_chars = set(",!")
cleaned = "".join(char for char in source if char not in remove_chars)
print(cleaned)
Scegli una condizione che esprima ciò che deve restare, per esempio conservare solo le cifre con char.isdigit(). La condizione viene valutata per ogni carattere e può quindi esprimere regole più flessibili di una tabella di eliminazione fissa. La separatrice determina il risultato: " ".join(...) inserisce spazi tra gli elementi conservati, mentre "".join(...) li accosta. join() unisce un iterabile, ma non esegue il filtraggio.
Rimuovere i caratteri che corrispondono a un pattern con re.sub()
re.sub(pattern, replacement, text) sostituisce ogni corrispondenza di un pattern di espressione regolare. Una classe di caratteri elenca le alternative e individua un carattere alla volta; una sostituzione vuota elimina ogni corrispondenza. Quando aiuta a leggere le barre inverse, usa una stringa raw per i pattern.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import re
source = "Hello, World!"
cleaned = re.sub(r"[,!]", "", source)
print(cleaned)
La classe [,!] individua una virgola oppure un punto esclamativo. Per rimuovere un intervallo o una categoria di caratteri, esprimi la regola nel pattern; leggilo e verificalo con attenzione, perché la punteggiatura può avere un significato speciale nelle espressioni regolari. Se un carattere con un ruolo speciale nel regex deve essere individuato alla lettera, sottoponilo a escape. Per un breve insieme fisso, str.translate() è spesso più leggibile; scegli re.sub() quando il punto è proprio usare un pattern.
Scegliere un approccio e comprenderne i limiti
Scegli in base a come viene specificato il testo da rimuovere:
- Usa
str.replace()per una sottostringa nota o poche sostituzioni esplicite. - Usa
str.translate()per eliminare un insieme fisso di caratteri singoli. - Usa una comprehension e
str.join()quando la regola dipende da una condizione su ogni carattere. - Usa
re.sub()quando un pattern di espressione regolare descrive cosa rimuovere.
Queste operazioni rimuovono esattamente ciò che selezionano i loro argomenti. Non eliminano automaticamente gli spazi circostanti, non normalizzano Unicode e non considerano equivalenti le lettere maiuscole e minuscole. Se la rimozione deve ignorare le maiuscole, definisci quali varianti includere oppure applica una regola di corrispondenza senza distinzione tra maiuscole e minuscole; considera però che convertire il testo originale in minuscolo o maiuscolo lo modifica. Evita di convertirlo solo per rimuovere caratteri, a meno che la modifica non sia desiderata. Gli esempi illustrano la forma di ciascun metodo; per sceglierne uno non serve fare affermazioni comparative sulla velocità. Preferisci la regola più chiara per i dati da ripulire e, se le prestazioni sono importanti, misurale con input rappresentativi.