Il n'y a pas de moyen rapide - vous avez des chaînes, les chaînes sont immuables, vous devez en créer de nouvelles.
La meilleure solution consiste probablement à créer votre propre dictionnaire de traduction et à effectuer vous-même le travail fastidieux :
reserved = """? & | ! { } [ ] ( ) ^ ~ * : \ " ' + -"""
tr = { c:f"\\{c}" for c in reserved}
print(tr)
data = ['gold-bear@gmail.com', 'P&G@dom.com', 'JACKSON! BOT', 'annoying\name']
transformed = [ ''.join(tr.get(letter,letter) for letter in word) for word in data]
for word in transformed:
print(word)
Sortie :
# translation dictionary
{'?': '\\?', ' ': '\\ ', '&': '\\&', '|': '\\|', '!': '\\!', '{': '\\{',
'}': '\\}', '[': '\\[', ']': '\\]', '(': '\\(', ')': '\\)', '^': '\\^',
'~': '\\~', '*': '\\*', ':': '\\:', '\\': '\\\\', '"': '\\"', "'": "\\'",
'+': '\\+', '-': '\\-'}
# transformed strings
gold\-bear@gmail.com
P\&G@dom.com
JACKSON\!\ BOT
annoying
ame
Sidenotes :
- Votre exemple a manqué d'échapper à l'espace intérieur
'JACKSON\! BOT'
.
- El
repl()
de la transformed
a l'air d'être "mal" échappée parce que, lors de l'impression, elle échappe à chaque '\'
encore une fois - ce qui est imprimé voir liste de mots