379 votes

Python remplacer plusieurs chaînes

Je voudrais utiliser la fonction remplacer pour remplacer plusieurs chaînes.

J’ai actuellement

mais je voudrais avoir quelque chose comme

Bien que qui ne se sent pas bonne syntaxe

Quelle est la bonne façon de faire cela ? aime bien comment vous pouvez faire dans grep/regex et pour remplacer les champs à certaines chaînes de recherche

318voto

Andrew Clark Points 77748

Voici un court exemple qui devrait faire l’affaire avec des expressions régulières :

Par exemple :

161voto

johsephm Points 769

Vous pouvez juste faire une belle petite fonction en boucle qui suivrait toutes les « normes » de l’étiquette de codage. Pas aussi belle que les solutions de Python à d’autres problèmes similaires, mais au moins c’est propre et bon droit technique de codage ?

est la chaîne complète, et est un dictionnaire où les clés sont la chaîne à remplacer et les définitions sont les chaînes à mettre en place.

104voto

Björn Lindqvist Points 3739

Voici une variante de la première solution à l’aide de réduire, en cas que vous aimez être fonctionnelle. :)

version encore mieux de Martineau :

30voto

MiniQuark Points 8927

J'ai construit ce moment de F. J. s excellente réponse:

import re

def multiple_replacer(*key_values):
    replace_dict = dict(key_values)
    replacement_function = lambda match: replace_dict[match.group(0)]
    pattern = re.compile("|".join([re.escape(k) for k, v in key_values]), re.M)
    return lambda string: pattern.sub(replacement_function, string)

def multiple_replace(string, *key_values):
    return multiple_replacer(*key_values)(string)

Un tir d'utilisation:

>>> replacements = (u"café", u"tea"), (u"tea", u"café"), (u"like", u"love")
>>> print multiple_replace(u"Do you like café? No, I prefer tea.", *replacements)
Do you love tea? No, I prefer café.

Notez que depuis le remplacement est effectué en une seule passe, "café" modifications "thé", mais il n'est pas à nouveau "café".

Si vous avez besoin de faire le remplacement de nombreuses fois, vous pouvez créer une fonction de remplacement facilement:

>>> my_escaper = multiple_replacer(('"','\\"'), ('\t', '\\t'))
>>> many_many_strings = (u'This text will be escaped by "my_escaper"',
                       u'Does this work?\tYes it does',
                       u'And can we span\nmultiple lines?\t"Yes\twe\tcan!"')
>>> for line in many_many_strings:
...     print my_escaper(line)
... 
This text will be escaped by \"my_escaper\"
Does this work?\tYes it does
And can we span
multiple lines?\t\"Yes\twe\tcan!\"

Améliorations:

  • tourné code dans une fonction
  • ajouté soutien multiligne
  • correction d'un bug à s'échapper
  • facile de créer une fonction spécifique à un multiple de remplacement

Profitez-en! :-)

24voto

Fredrik Pihl Points 20944

Je voudrais proposer l’utilisation de modèles de chaîne. Juste place la chaîne à remplacer dans un dictionnaire et tout est réglé ! Exemple de docs.python.org

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X