Le stringhe in Python sono im­mu­ta­bi­li. Tuttavia, è possibile rimuovere dei caratteri uti­liz­zan­do appositi metodi per creare una nuova sequenza di caratteri che contenga soltanto le parti de­si­de­ra­te dell’originale.

Una spie­ga­zio­ne sull’im­mu­ta­bi­li­tà delle stringhe

Per im­mu­ta­bi­li­tà si intende il fatto che un oggetto, una volta creato, non può più essere mo­di­fi­ca­to. Con le stringhe in Python, ogni sequenza di caratteri è im­mu­ta­bi­le. Se scegli di rimuovere dei caratteri da una stringa con i metodi di Python, in realtà stai creando una nuova sequenza di caratteri che contiene soltanto de­ter­mi­na­ti elementi di quella originale. La stringa di partenza rimane invariata. L’im­mu­ta­bi­li­tà delle stringhe con­tri­bui­sce a rendere ef­fi­cien­te la gestione della memoria in Python e aiuta a evitare effetti im­pre­vi­sti quando si lavora con le sequenze di caratteri.

Rimozione di de­ter­mi­na­ti caratteri da una stringa

Per rimuovere de­ter­mi­na­ti caratteri da una stringa, puoi uti­liz­za­re ad esempio str.replace() oppure re.sub() con un’espres­sio­ne regolare che rap­pre­sen­ta i caratteri o il modello da rimuovere.

str.replace()

La funzione str.replace() serve a rimuovere parti di un testo o so­sti­tuir­le con una sot­to­strin­ga.

original_string = "Hello, Python#"
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Hello, Python#
print(modified_string)  # Output: Hello, Python!
Python

Nell’esempio qui sopra il metodo replace() so­sti­tui­sce tutti i caratteri della forma “#” in original_string con un punto escla­ma­ti­vo “!”.

re.sub()

La funzione re.sub() fa parte del modulo re in Python. Esso ti permette di cercare e so­sti­tui­re espres­sio­ni regolari in sequenze di caratteri.

import re
original_string = "Hello, World! @#$%^&*"
modified_string = re.sub(r'[@#$%^&*]', '', original_string)
print(original_string)  # Output: Hello, World! @#$%^&*
print(modified_string)  # Output: Hello, World!
Python

Il modello [@#$%^&*] è un’espres­sio­ne regolare che cerca i caratteri speciali @, #, $, %, ^, &,*. La funzione re.sub() va alla ricerca di tutte le cor­ri­spon­den­ze del modello nella stringa originale original_string e le so­sti­tui­sce con una sequenza di caratteri vuota ''. Il risultato viene me­mo­riz­za­to nella variabile modified_string e quindi emesso.

Rimozione di tutti i caratteri tranne le lettere

Tra i vari metodi a tua di­spo­si­zio­ne per rimuovere tutte le lettere da una stringa trovi isalpha(), filter() e re.sub().

re.sub()

import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub(r'[^a-zA-Z]', '', original_string)
print(original_string)  # Output: Hello, 123 World! @#$%^&*
print(modified_string)  # Output: HelloWorld
Python

L’espres­sio­ne regolare [^a-zA-Z] cor­ri­spon­de a ogni carattere che non sia una lettera maiuscola o minuscola. Come risultato, la stringa modified_string contiene solo le lettere della stringa originale. Anche gli spazi vuoti sono stati rimossi.

isalpha()

original_string = "Hello, 123 World! @#$%^&*"
modified_string = ''.join(char for char in original_string if char.isalpha())
print(original_string)  # Output: Hello, 123 World! @#$%^&*
print(modified_string)  # Output: HelloWorld
Python

In questo esempio uti­liz­zia­mo le com­pren­sio­ni di lista per eseguire un’ite­ra­zio­ne con ogni lettera di original_string. Il metodo isalpha() controlla se un carattere è una lettera. Solo le lettere vengono inserite in una nuova sequenza di caratteri modified_string, mentre tutti gli altri caratteri vengono ignorati.

filter()

original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isalpha, original_string)
modified_string = ''.join(filtered_chars)
print(original_string)  # Output: Hello, 123 World! @#$%^&*
print(modified_string)  # Output: HelloWorld
Python

Il metodo str.isalpha() re­sti­tui­sce il valore True se il carattere è una lettera; in caso contrario, re­sti­tui­sce False. La funzione filter() crea un oggetto filter che contiene solo i caratteri per i quali la con­di­zio­ne str.isalpha() è vera. In questo modo possiamo estrarre tutti i caratteri in original_string che non sono lettere.

Rimozione di tutti i caratteri tranne i numeri

È possibile separare i numeri in modo simile agli esempi pre­ce­den­ti con re.sub(), filter() e con la funzione isdecimal() analoga a isalpha().

re.sub()

import re
original_string = "Hello, 123 World! @#$%^&*"
modified_string = re.sub('[^0-9]', '', original_string)
print(original_string)   # Output: Hello, 123 World! @#$%^&*
print(modified_string)    # Output: 123
Python

Con 0-9 definiamo un in­ter­val­lo che include tutte le cifre da 0 a 9. Il trattino di se­pa­ra­zio­ne - fra 0 e 9 funge da operatore di in­ter­val­lo. Il segno ^ davanti si riferisce a tutti i caratteri che non sono compresi nell’in­ter­val­lo indicato tra 0 e 9. Essi sono so­sti­tui­ti con spazi vuoti da re.sub.

filter()

original_string = "Hello, 123 World! @#$%^&*"
filtered_chars = filter(str.isdecimal, original_string)
modified_string = ''.join(filtered_chars)
print(original_string)   # Output: Hello, 123 World! @#$%^&*
print(modified_string)    # Output: 123
Python

La funzione filter(), in com­bi­na­zio­ne con isdecimal(), permette di filtrare i numeri in una stringa e rimuovere i restanti caratteri. La nuova stringa mostra di con­se­guen­za solo le cifre 123.

isdecimal()

original_string = "Hello, 123 World"
modified_string = ''.join('*' if not char.isdecimal() else char for char in original_string)
print(original_string)   # Output: Hello, 123 World
print(modified_string)    # Output: *******123******
Python

È anche possibile uti­liz­za­re il metodo isdecimal() in una com­pren­sio­ne di lista per eseguire un’ite­ra­zio­ne su ogni char in original_string. Se il carattere non è una cifra decimale (not char.isdecimal() è vera), viene so­sti­tui­to da un asterisco *, al­tri­men­ti resta invariato.

Rimozione di caratteri con translate()

Il metodo translate() è una funzione integrata in Python, uti­liz­za­ta per la so­sti­tu­zio­ne e la tra­du­zio­ne avanzate di caratteri in sequenze di caratteri. Il metodo offre una soluzione ef­fi­cien­te per so­sti­tui­re caratteri sulla base di una tabella di tra­du­zio­ne.

original_string = "Hello, World! Remove vowels."
translation_table = str.maketrans(dict.fromkeys('aeiouAEIOU', '*'))
modified_string = original_string.translate(translation_table)
print(original_string)   # Output: Hello, World! Remove vowels.
print(modified_string)    # Output: H*ll*, W*rld! R*m*v* v*w*ls.
Python

Uti­liz­zia­mo il co­strut­to­re str.maketrans() e dict.fromkeys() per creare la tabella di tra­du­zio­ne. Quest’ultima prevede che tutte le vocali debbano essere so­sti­tui­te con *. La tabella viene quindi applicata sulla stringa originale per ottenere la stringa modified_string.

Consiglio

Per filtrare le stringhe è anche possibile con­si­de­ra­re il metodo string index in Python, così da filtrare i caratteri in de­ter­mi­na­te posizioni. Se come output desideri ottenere le sequenze di caratteri in un formato specifico, ti con­si­glia­mo di dare un’occhiata all’articolo dedicato alla for­mat­ta­zio­ne delle stringhe in Python nella nostra guida.

Web Hosting
Diventa il n°1 della rete con il provider di hosting n°1 in Europa
  • Di­spo­ni­bi­li­tà garantita al 99,99%
  • Dominio, SSL ed e-mail inclusi
  • As­si­sten­za 24/7 in lingua italiana
Vai al menu prin­ci­pa­le