Come sostituire un carattere in una stringa usando Python

Questo tutorial copre i diversi modi per sostituire il carattere in una stringa Python: utilizzando metodi di stringa incorporati, espressioni regolari e altro.

Le stringhe in Python sono strutture dati integrate che memorizzano una sequenza di caratteri Unicode. A differenza di alcune strutture dati Python, come elenchi e dizionari, le stringhe sono immutabili. Ciò significa che non è possibile modificare una stringa esistente.

Tuttavia, potresti voler manipolare le stringhe (rimuovere gli spazi bianchi iniziali e finali, modificare le maiuscole, sostituire un carattere con un altro e molto altro ancora) quando lavori con esse.

Quindi, come manipoliamo le stringhe Python? E come sostituiamo un carattere in una stringa Python? Risponderemo a queste domande in questo tutorial concentrandoci su:

  • Immutabilità delle stringhe Python
  • Metodi di stringhe Python per la manipolazione delle stringhe
  • Diversi modi per sostituire un carattere in una stringa

Iniziamo…

Immutabilità delle stringhe Python

Come accennato, le stringhe Python sono immutabili. Pertanto non è possibile modificare una stringa esistente sul posto. non è possibile modificare una stringa esistente sul posto

Ad esempio, considera la stringa “Programmazione Python!”.

Puoi accedere a un singolo elemento della stringa utilizzando l’indice e una sottostringa specificando la sezione con l’inizio e la fine, come mostrato:

>>> my_str = "Python programming!"
>>> my_str[0]
'P'
>>> my_str[4]
'o'
>>> my_str[1:9]
'ython pr'
>>> my_str[9]
'o'

Supponiamo che tu voglia sostituire la lettera “o” con la cifra “0”.

Sai di avere una o negli indici 4 e 9 (vedi lo snippet di codice sopra). Ma se provi a impostare direttamente il carattere, nell’indice specifico, su “0”, otterrai il seguente errore:

>>> my_str[4] = '0'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Python fornisce un insieme di metodi stringa che agiscono su una stringa esistente e restituiscono una nuova stringa con le modifiche richieste.

Leggi anche: Programmi Python sulle operazioni su stringhe.

Pertanto, puoi utilizzare i metodi delle stringhe abbinati alla comprensione delle liste, ai loop e alle espressioni regolari per eseguire attività di manipolazione delle stringhe. In questo tutorial esamineremo i diversi modi per sostituire un carattere in una stringa Python.

Sostituzione di un carattere nelle stringhe Python

Esistono molti casi d’uso in cui potresti voler sostituire caratteri o sottostringhe in una stringa Python. Ecco qui alcuni di loro:

  • Pulizia del testo: quando si lavora con dati di testo, potrebbe essere necessario pulire il testo sostituendo determinati caratteri. Ad esempio, rimuovendo o sostituendo caratteri speciali, spazi bianchi aggiuntivi o simboli indesiderati.
  • Formattazione: potresti voler modificare la formattazione del testo, ad esempio scrivere in maiuscolo o convertire il testo in minuscolo. Ad esempio, garantendo una capitalizzazione coerente nei titoli o nelle intestazioni.
  • Mascheramento dei dati: spesso dovrai mascherare informazioni sensibili come numeri di identificazione personale o numeri di carte di credito per proteggere i dati sensibili preservandone il formato.
  • Gestione di URL e percorsi: quando si lavora con URL o percorsi di file, potrebbe essere necessario sostituire alcuni caratteri per garantire che siano formattati correttamente e compatibili con browser Web o file system.

Prenderemo un semplice esempio di sostituzione di un carattere in una stringa.

Inizieremo con un approccio che utilizza cicli e istruzioni condizionali, quindi procederemo a discutere altri metodi migliori per ottenere lo stesso risultato.

Prendiamo lo stesso esempio sostituendo ‘o’ con ‘0’ nella stringa “Programmazione Python!”.

Ecco come possiamo scorrere la stringa utilizzando un ciclo for e sostituire il carattere specifico:

original_string = "Python programming!"
new_string = ""
for char in original_string:
    if char == "o":
        new_string += "0"
    else:
        new_string += char
print(new_string)  

In questo approccio, eseguiamo manualmente il ciclo di ogni carattere in original_string. Se il carattere è ‘o’, aggiungiamo ‘0’ a nuova_stringa; altrimenti, aggiungiamo lo stesso carattere. In questo modo, eseguiamo la sostituzione dei caratteri e costruiamo new_string.

# Output
Pyth0n pr0gramming!

L’uso del ciclo for e della ramificazione condizionale con le istruzioni if ​​è difficile da mantenere. Soprattutto quando è necessario sostituire una sottostringa o più caratteri.

Esistono approcci migliori per sostituire i caratteri o una sottostringa e li esamineremo nelle sezioni seguenti.

#1. Utilizzando str.replace()

Possiamo usare il metodo stringa replace() per sostituire un carattere o una sottostringa con un’altra stringa. Utilizzando str.replace(old, new) si sostituiscono tutte le occorrenze del vecchio carattere o sottostringa con il nuovo carattere o sottostringa.

Qui usiamo il metodo replace() lettera ‘o’ con la cifra ‘0’ in original_string.

original_string = "Python programming!"
new_string = original_string.replace("o", "0")
print(new_string) 

La stringa risultante è in new_string.

# Output
Pyth0n pr0gramming!

#2. Utilizzo della comprensione delle liste e del metodo join()

Per sostituire un carattere in una stringa Python, possiamo usare la comprensione delle liste insieme al metodo string join().

Vediamo come possiamo riscrivere il nostro esempio:

  • Possiamo usare una lista di comprensione per scorrere ogni carattere in original_string. Se il carattere è “o”, lo sostituiamo con “0” e altrimenti manteniamo lo stesso carattere.
  • Quindi usiamo str.join() per combinare questi caratteri in un’unica stringa, ottenendo new_string. Tieni presente che questa è un’alternativa più concisa al looping e alla ramificazione condizionale quando è necessario sostituire un singolo carattere in una stringa.
original_string = "Python programming!"
new_string = ''.join(['0' if char == 'o' else char for char in original_string])
print(new_string) 

Otteniamo l’output atteso:

# Output
Pyth0n pr0gramming!

#3. Utilizzo delle espressioni regolari

Un altro metodo per sostituire i caratteri nelle stringhe Python è utilizzare le espressioni regolari (regex). Python viene fornito con il built-in re modulo per le operazioni di corrispondenza delle espressioni regolari. Con regex, puoi specificare un modello da cercare, una stringa in cui cercare e una stringa con cui sostituire il modello corrispondente.

Qui utilizziamo la funzione sub() del modulo re con la sintassi re.sub(pattern, replace, string).

import re

original_string = "Python programming!"
new_string = re.sub(r'o', '0', original_string)
print(new_string) 

Il modello r’o’ corrisponde a tutte le occorrenze della lettera ‘o’ in original_string e le sostituisce con ‘0’.

# Output
Pyth0n pr0gramming!

Puoi utilizzare le espressioni regolari per trovare corrispondenze con modelli più complessi. Prendiamo l’esempio del mascheramento dei numeri delle carte di credito. Supponiamo di voler sostituire tutti i numeri, tranne le ultime quattro cifre, con una “X”. Ecco come possiamo farlo:

import re

def mask_credit_card(card_number):
    # Use regular expressions to match and replace characters
    masked_number = re.sub(r'\d(?=\d{4})', 'X', card_number)
    return masked_number

# Example usage:
credit_card_number = "1234567898765432"
masked_number = mask_credit_card(credit_card_number)
print(masked_number)

Ed ecco l’output:

# Output
XXXXXXXXXXXX5432

Per mantenere semplice la regex, non abbiamo incluso il trattino, ma se lo desideri puoi modificare l’esempio secondo necessità.

#4. Utilizzando str.maketrans() e str.translate()

I metodi str.maketrans() e str.translate() in Python vengono utilizzati per eseguire la traduzione e la sostituzione a livello di carattere nelle stringhe.

Come funziona str.maketrans()

Il metodo maketrans() viene utilizzato per creare una tabella di traduzione che specifica come sostituire i caratteri in una stringa. Puoi usarlo con la sintassi: str.maketrans(x, y). Qui:

  • x è la stringa contenente i caratteri che desideri sostituire.
  • y è la stringa contenente i caratteri con cui vuoi sostituire x.

Il metodo maketrans() genera una tabella di traduzione basata sulle mappature da x a y. È quindi possibile utilizzare questa tabella di traduzione con il metodo str.translate() per eseguire la sostituzione effettiva.

Come funziona str.translate()

È possibile utilizzare il metodo str.translate() per applicare la tabella di traduzione creata da str.maketrans() a una stringa. Esegue la sostituzione carattere per carattere in base alle mappature definite nella tabella di traduzione. E restituisce una nuova stringa con applicate le sostituzioni dei caratteri specificate.

Ecco come puoi utilizzare il metodo Translate():

new_string = original_string.translate(translation_table)
  • stringa_originale: la stringa di input che desideri modificare.
  • translation_table: la tabella di traduzione creata utilizzando str.maketrans() che definisce le mappature dei caratteri.

Combinando i metodi maketrans() e str.translate(), riscriviamo il nostro esempio in questo modo:

original_string = "Python programming!"
translation_table = str.maketrans('o', '0')
new_string = original_string.translate(translation_table)
print(new_string)

Qui creiamo una tabella di traduzione utilizzando str.maketrans(‘o’, ‘0’) per specificare che ‘o’ deve essere sostituito da ‘0’. Utilizziamo quindi il metodo Translate() su original_string per applicare questa traduzione, ottenendo come risultato new_string.

# Output
Pyth0n pr0gramming!

Questi metodi sono utili per attività come la sostituzione di un carattere e altre manipolazioni a livello di carattere nelle stringhe.

Conclusione

Rivediamo ciò che abbiamo imparato.

Le stringhe Python sono immutabili. Quindi, quando vuoi sostituire un carattere in una stringa Python, non puoi semplicemente riassegnare il carattere a un particolare indice. Abbiamo esaminato i seguenti approcci per sostituire uno o più caratteri in una stringa Python:

  • Utilizzare str.replace(old, new) per sostituire tutte le istanze del vecchio con la nuova sottostringa.
  • Puoi anche utilizzare la comprensione delle liste e il metodo join(). Utilizza la comprensione dell’elenco per ottenere la sostituzione dei caratteri e il metodo join() per unire l’elenco di caratteri in una stringa.
  • Puoi utilizzare la corrispondenza dei modelli con le espressioni regolari per sostituire le occorrenze di un carattere o di un modello. Utilizza la funzione sub() con re.sub(modello, sostituzione, stringa).
  • Utilizza str.maketrans() per ottenere una tabella di traduzione e il metodo Translate() per applicare la tabella di traduzione alla stringa originale.

Assicurati di codificare alcuni esempi per comprendere meglio queste tecniche. Successivamente, scopri come rimuovere l’ultimo carattere da una stringa Python.