Sostituisci più caratteri in una stringa in Python

Rayven Esplanada 10 ottobre 2023
  1. Usa str.replace() per sostituire più caratteri in Python
  2. Usa re.sub() o re.subn() per sostituire più caratteri in Python
  3. translate() e maketrans() per sostituire più caratteri in Python
Sostituisci più caratteri in una stringa in Python

Questo tutorial mostra come sostituire più caratteri in una stringa in Python.

Supponiamo di voler rimuovere i caratteri speciali in una stringa e sostituirli con spazi bianchi.

  • L’lista dei caratteri speciali da rimuovere sarebbe !#$%^&*().
  • Inoltre, vogliamo sostituire le virgole , con spazi bianchi.
  • Il testo di esempio che manipoleremo:
A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$

Usa str.replace() per sostituire più caratteri in Python

Possiamo usare il metodo replace() del tipo di dati str per sostituire le sottostringhe in un output diverso.

replace() accetta due parametri, il primo parametro è il pattern regex con cui vuoi far corrispondere le stringhe, e il secondo parametro è la stringa di sostituzione per le stringhe corrispondenti.

È anche un terzo parametro opzionale in replace() che accetta un numero intero per impostare il count massimo di sostituzioni da eseguire. Se metti 2 come parametro count, la funzione replace() corrisponderà e sostituirà solo 2 istanze all’interno della stringa.

str.replace('Hello', 'Hi') sostituirà tutte le istanze di Hello in una stringa con Hi. Se hai una stringa Hello World e esegui la funzione di sostituzione su di essa, diventerebbe Hi World dopo l’esecuzione.

Usiamo replace sul testo di esempio che abbiamo dichiarato sopra. Prima rimuovendo i caratteri speciali ripetendo ogni carattere e sostituendoli con una stringa vuota, quindi convertendo le virgole in spazi bianchi.

txt = "A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$"


def processString(txt):
    specialChars = "!#$%^&*()"
    for specialChar in specialChars:
        txt = txt.replace(specialChar, "")
    print(txt)  # A,Quick,brown,fox,jumped,over,the,lazy,dog
    txt = txt.replace(",", " ")
    print(txt)  # A Quick brown fox jumped over the lazy dog

Ciò significa che qualsiasi cosa all’interno della parentesi quadra di spChars verrà sostituita da una stringa vuota utilizzando txt.replace(spChars, '').

Il risultato della stringa della prima funzione replace() sarebbe quindi:

A, Quick, brown, fox, jumped, over, the, lazy, dog

La prossima chiamata a replace() sostituirà tutte le istanze di virgola , in un unico spazio bianco:

A Quick brown fox jumped over the lazy dog

Usa re.sub() o re.subn() per sostituire più caratteri in Python

In Python, puoi importare il re module, che ha una quantità di operazioni di corrispondenza delle espressioni per regex da utilizzare.

Due di tali funzioni all’interno di re sono sub() e subn().

Dichiariamo un altro esempio di stringa per questi metodi. Supponiamo di voler sostituire tutti i numeri all’interno di una stringa in X:

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."

re.sub() per sostituire più caratteri in Python

La funzione ha 3 argomenti principali. Il primo argomento accetta un pattern regex, il secondo argomento è una stringa per sostituire i pattern corrispondenti e il terzo è la stringa con cui operare.

Crea una funzione converti tutti i numeri all’interno di una stringa in X.

import re

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."


def processString3(txt):
    txt = re.sub("[0-9]", "X", txt)
    print(txt)


processString3(txt)

Produzione:

Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.

re.subn() per sostituire più caratteri in Python

Questa funzione è essenzialmente la stessa di re.sub() ma restituisce invece una tupla della stringa convertita e il numero di sostituzioni effettuate.

import re

txt = "Hi, my phone number is 089992654231. I am 34 years old. I live in 221B Baker Street. I have 1,000,000 in my bank account."


def processString4(txt):
    txt, n = re.subn("[0-9]", "X", txt)
    print(txt)


processString4(txt)

Produzione:

Hi, my phone number is XXXXXXXXXXXX. I am XX years old. I live in XXXB Baker Street. I have X,XXX,XXX in my bank account.'
txt, n = re.subn("[0-9]", "X", txt)

Nello snippet di codice sopra, la stringa elaborata è assegnata a txt e il contatore di sostituzione è assegnato a n.

re.subn() è utile se vuoi annotare quanti gruppi di pattern hai manipolato come metriche o per ulteriori elaborazioni.

translate() e maketrans() per sostituire più caratteri in Python

translate() e maketrans() usano un approccio diverso dall’espressione regolare, fa uso di dizionari per mappare i vecchi a nuovi valori.

maketrans() accetta 3 parametri o un singolo dizionario di mappature:

  • str1 - Stringa di caratteri da sostituire
  • str2 - Stringa di sostituzioni per i caratteri sopra
  • str3 - Stringa di caratteri da eliminare

maketrans() una tabella di mappatura tra la stringa originale e la sua sostituzione.

translate() accetta tutto ciò che restituisce maketrans() e quindi genera la stringa tradotta.

Supponiamo di voler convertire tutte le vocali minuscole all’interno di una stringa in maiuscole ed eliminare ogni x, yez trovata nella stringa.

txt = "Hi, my name is Mary. I like zebras and xylophones."


def processString5(txt):
    transTable = txt.maketrans("aeiou", "AEIOU", "xyz")
    txt = txt.translate(transTable)
    print(txt)


processString5(txt)

Produzione:

HI, m nAmE Is MAr. I lIkE EbrAs And lOphOnEs.

translate() ha convertito tutte le vocali minuscole in versioni maiuscole e ha rimosso tutte le istanze di x, y e z.

Un altro approccio per utilizzare questi metodi consiste nell’usare un singolo dizionario di mappature invece di 3 argomenti.

def processString6(txt):
    dictionary = {
        "a": "A",
        "e": "E",
        "i": "I",
        "o": "O",
        "u": "U",
        "x": None,
        "y": None,
        "z": None,
    }
    transTable = txt.maketrans(dictionary)
    txt = txt.translate(transTable)
    print(txt)

Questo produrrà comunque lo stesso output di processString5 ma è implementato con i dizionari. Puoi usare tutto ciò che è più conveniente per te.

In sintesi, ci sono diversi modi per sostituire più caratteri in una stringa utilizzando funzioni incorporate o funzioni da librerie importate in Python.

Il metodo più comune è usare replace(). Anche re.sub() e subn() sono abbastanza facili da usare e da imparare. translate() utilizza un approccio diverso poiché non si basa su espressioni regolari per eseguire la manipolazione delle stringhe, ma si basa su dizionari e mappe.

Se vuoi, puoi anche eseguire manualmente il loop sulla stringa usando i cicli for e aggiungere le tue condizioni per sostituire e usare semplicemente substring() o split(), ma sarebbe molto inefficiente e ridondante. Python offre funzioni esistenti per fare il lavoro per te, il che è molto più facile che fare il lavoro sporco da solo.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Articolo correlato - Python String