Comment remplacer plusieurs caractères dans une chaîne de caractères en Python
-
Utilisez
str.replace()
pour remplacer plusieurs caractères en Python -
Utilisation de
re.sub()
oure.subn()
pour remplacer plusieurs caractères en Python -
translate()
etmaketrans()
pour remplacer plusieurs 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 à remplacerstr2
- Chaîne de remplacement des caractères ci-dessusstr3
- 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.
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.
LinkedInArticle connexe - Python String
- Supprimer les virgules de la chaîne en Python
- Comment vérifier qu'une chaîne est vide de manière pythonique
- Convertir une chaîne en nom de variable en Python
- Comment supprimer les espaces dans une chaîne de caractères en Python
- Comment extraire des nombres d'une chaîne de caractèresen Python
- Comment convertir une chaîne de caractères en datetime en Python