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
4 Réponses :
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)
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("():", "___")
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)
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.