Comment remplacer plusieurs caractères dans une chaîne de caractères en Python

Rayven Esplanada 10 octobre 2023
  1. Utilisez str.replace() pour remplacer plusieurs caractères en Python
  2. Utilisation de re.sub() ou re.subn() pour remplacer plusieurs caractères en Python
  3. translate() et maketrans() pour remplacer plusieurs caractères en Python
Comment remplacer plusieurs caractères dans une chaîne de caractères en Python

Ce tutoriel vous montre comment remplacer plusieurs caractères dans une chaîne en Python.

Supposons que nous voulions supprimer les caractères spéciaux d’une chaîne et les remplacer par des espaces.

  • La liste des caractères spéciaux à supprimer serait !#$%^&*().
  • Nous voulons également remplacer les virgules , par des espaces.
  • L’exemple de texte que nous allons manipuler :
A!!!,Quick,brown#$,fox,ju%m%^ped,ov&er&),th(e*,lazy,d#!og$$$

Utilisez str.replace() pour remplacer plusieurs caractères en Python

Nous pouvons utiliser la méthode replace() du type de données str pour remplacer des sous-chaînes dans une sortie différente.

replace() accepte deux paramètres, le premier paramètre est le modèle de regex avec lequel vous voulez faire correspondre les chaînes de caractères, et le second paramètre est la chaîne de remplacement pour les chaînes de caractères correspondantes.

Il y a également un troisième paramètre optionnel dans replace() qui accepte un entier pour fixer le count maximum de remplacements à exécuter. Si vous mettez 2 comme paramètre count, la fonction replace() ne fera correspondre et ne remplacera que 2 instances dans la chaîne.

La fonction str.replace('Hello', 'Hi') remplacera toutes les instances de Hello dans une chaîne par Hi. Si vous avez une chaîne de caractères Hello World et que vous y lancez la fonction de remplacement, elle deviendra Hi World après exécution.

Utilisons replace sur l’exemple de texte que nous avons déclaré ci-dessus. Commencez par supprimer les caractères spéciaux en bouclant chaque caractère et en les remplaçant par une chaîne vide, puis convertissez les virgules en espaces.

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

Cela signifie que tout ce qui se trouve entre les crochets de spChars sera remplacé par une chaîne vide en utilisant txt.replace(spChars, '').

Le résultat de la première fonction replace() serait alors la chaîne de caractères :

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

Le prochain appel à la fonction replace() remplacera toutes les instances de la virgule , par un seul espace :

A Quick brown fox jumped over the lazy dog

Utilisation de re.sub() ou re.subn() pour remplacer plusieurs caractères en Python

En Python, vous pouvez importer le re module, qui possède un certain nombre d’opérations de correspondance d’expressions pour les regex que vous pouvez utiliser.

Deux de ces fonctions dans re sont sub() et subn().

Déclarons un autre exemple de chaîne de caractères pour ces méthodes. Disons que nous voulons remplacer tous les nombres dans une chaîne par 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() pour remplacer plusieurs caractères en Python

La fonction a 3 arguments principaux. Le premier argument accepte un modèle de regex, le deuxième argument est une chaîne de caractères pour remplacer les modèles correspondants, et le troisième est la chaîne de caractères avec laquelle il faut opérer.

Créer une fonction permet de convertir tous les nombres d’une chaîne en 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)

Production:

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() pour remplacer plusieurs caractères en Python

Cette fonction est essentiellement la même que re.sub() mais retourne à la place un tuple de la chaîne convertie et le nombre de remplacements effectués.

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)

Production:

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)

Dans l’extrait de code ci-dessus, la chaîne traitée est affectée à txt et le compteur de remplacement est affecté à n.

Le paramètre re.subn() est utile si vous voulez noter le nombre de groupes de motifs que vous avez manipulés comme métriques ou pour un traitement ultérieur.

translate() et maketrans() pour remplacer plusieurs caractères en Python

translate() et maketrans() utilisent une approche différente de la regex, elle utilise des dictionnaires pour faire correspondre les anciennes et les nouvelles valeurs.

maketrans() accepte 3 paramètres ou un seul dictionnaire de correspondances :

  • str1 - Chaîne de caractères à remplacer
  • str2 - Chaîne de remplacement des caractères ci-dessus
  • str3 - Chaîne de caractères à supprimer

maketrans() une table de correspondance entre la chaîne originale et son remplacement.

translate() accepte tout ce que retourne maketrans() et génère ensuite la chaîne traduite.

Supposons que nous voulions convertir toutes les voyelles minuscules d’une chaîne en majuscules et supprimer tous les x, y et z de la chaîne.

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)

Production:

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

translate() convertit toutes les voyelles minuscules en majuscules et supprime toutes les instances de x, y et z.

Une autre approche pour utiliser ces méthodes est d’utiliser un seul dictionnaire de correspondances au lieu de 3 arguments.

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)

Cela produira toujours le même résultat que processString5 mais est implémenté avec des dictionnaires. Vous pouvez utiliser ce qui vous convient le mieux.

En résumé, il existe de multiples façons de remplacer plusieurs caractères dans une chaîne en utilisant des fonctions intégrées ou des fonctions provenant de bibliothèques importées en Python.

La méthode la plus courante est d’utiliser replace(). Les fonctions re.sub() et subn() sont également assez faciles à utiliser et à apprendre. La méthode translate() est différente car elle ne s’appuie pas sur des expressions régulières pour manipuler les chaînes de caractères, mais sur des dictionnaires et des tables de correspondance.

Si vous le souhaitez, vous pouvez même boucler manuellement la chaîne en utilisant for loops et ajouter vos propres conditions pour remplacer et utiliser simplement substring() ou split(), mais ce serait très inefficace et redondant. Python offre des fonctions existantes pour faire le travail à votre place, ce qui est beaucoup plus facile que de faire le sale boulot vous-même.

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

Article connexe - Python String