3
votes

Remplacer plusieurs caractères dans une chaîne

Existe-t-il un moyen simple en python de remplacer plusieurs caractères par un autre?

Par exemple, je voudrais changer:

str.replace(":","_")
str.replace(")","_")
str.replace("(","_")

en

name1_22_3-3_+__Pos_bos

Donc, en gros, remplacer tout "(", ")", ":" avec "_" .

Je ne sais le faire qu'avec:

name1_22:3-3(+):Pos_bos 


0 commentaires

4 Réponses :


9
votes

Vous pouvez utiliser re.sub pour remplacer plusieurs caractères par un modèle:

'name1_22_3-3_+__Pos_bos '

Sortie

import re
s = 'name1_22:3-3(+):Pos_bos '
re.sub(r'[():]', '_', s)


0 commentaires

6
votes

Utilisez une table de traduction. En Python 2, maketrans est défini dans le module string .

table = str.maketrans({"(": "_", ")": "_", ":": "_"})

En Python 3, il s'agit d'un str code> méthode de classe.

>>> 'name1_22:3-3(+):Pos_bos'.translate(table)
'name1_22_3-3_+__Pos_bos'

Dans les deux cas, la table est passée comme argument à str.translate.

>>> table = str.maketrans("():", "___")

Dans Python 3, vous pouvez également passer un seul dict mappant les caractères d'entrée aux caractères de sortie à maketrans :

>>> import string
>>> table = string.maketrans("():", "___")


0 commentaires

3
votes

Restez fidèle à votre approche actuelle d'utilisation de replace():

repList = [':','(',')']   # list of all the chars to replace
rChar = '_'               # the char to replace with
for elem in repList:
    s = s.replace(elem, rChar)
print(s)

OUTPUT final:

s =  "name1_22:3-3(+):Pos_bos"
replaceList =  [(":", "_"), ("(", "_"), (")", "__")]

for elem in replaceList:
    print(*elem)          # : _, ( _, ) __  (for each iteration)
    s = s.replace(*elem)
print(s)


0 commentaires

2
votes

Une autre possibilité est l'utilisation de la compréhension de liste combinée avec ce que l'on appelle opérateur conditionnel ternaire de la manière suivante:

text = 'name1_22:3-3(+):Pos_bos '
out = ''.join(['_' if i in ':)(' else i for i in text])
print(out) #name1_22_3-3_+__Pos_bos

Comme il donne liste , j'utilise '' .join pour changer la liste de caractères ( str s de longueur 1) dans str.


0 commentaires