70 votes

Remplacer la chaîne de droite à gauche en Python ?

Je veux faire un remplacement de chaîne en Python, mais ne fais que la première instance de droite à gauche. Dans un monde idéal j'aurais :

 myStr = "mississippi"
print myStr.rreplace("iss","XXX",1)

> missXXXippi

Quelle est la meilleure façon de le faire, étant donné que rreplace n'existe pas ?

105voto

Stephen Emslie Points 2548

rsplit et join pourraient être utilisés pour simuler les effets d'un rreplace

 >>> 'XXX'.join('mississippi'.rsplit('iss', 1))
'missXXXippi'

25voto

eumiro Points 56644
>>> myStr[::-1].replace("iss"[::-1], "XXX"[::-1], 1)[::-1]
'missXXXippi'

15voto

ovgolovin Points 5990
>>> re.sub(r'(.*)iss',r'\1XXX',myStr)
'missXXXippi'

Le moteur regex consomme toute la chaîne, puis commence à revenir en arrière jusqu'à ce que iss soit trouvé. Ensuite, il remplace la chaîne trouvée par le modèle requis.


Quelques tests de vitesse

La solution avec [::-1] s'avère plus rapide.

La solution avec re n'était plus rapide que pour les longues chaînes (plus de 1 million de symboles).

12voto

Serdalis Points 5376

vous pouvez inverser une chaîne comme ceci :

 myStr[::-1]

pour remplacer il suffit d'ajouter le .replace :

 print myStr[::-1].replace("iss","XXX",1)

Cependant, maintenant, votre chaîne est à l'envers, alors inversez-la :

 myStr[::-1].replace("iss","XXX",1)[::-1]

et tu as fini. Si vos chaînes de remplacement sont statiques, inversez-les simplement dans le fichier pour réduire les frais généraux. Sinon, la même astuce fonctionnera.

 myStr[::-1].replace("iss"[::-1],"XXX"[::-1],1)[::-1]

3voto

Anaphory Points 903
def rreplace(s, old, new):
    try:
        place = s.rindex(old)
        return ''.join((s[:place],new,s[place+len(old):]))
    except ValueError:
        return s

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