215 votes

rreplace - Comment remplacer la dernière occurrence d'une expression dans une chaîne de caractères ?

Existe-t-il un moyen rapide en Python de remplacer des chaînes de caractères mais, au lieu de commencer par le début comme replace fait, en commençant par la fin ? Par exemple :

>>> def rreplace(old, new, occurrence)
>>>     ... # Code to replace the last occurrences of old by new

>>> '<div><div>Hello</div></div>'.rreplace('</div>','</bad>',1)
>>> '<div><div>Hello</div></bad>'

10 votes

Bonne question, à en juger par les solutions compliquées apportées à un problème aussi simple.

7 votes

Les réponses ci-dessous contiennent une phrase élégante qui a mis 9 ans ( !) à être ajoutée à cette question. Il suffit de faire défiler la page pour la trouver.

2voto

naivnomore Points 730

Voici une solution récursive au problème :

def rreplace(s, old, new, occurence = 1):

    if occurence == 0:
        return s

    left, found, right = s.rpartition(old)

    if found == "":
        return right
    else:
        return rreplace(left, old, new, occurence - 1) + new + right

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