Existe-t-il un moyen rapide en Python de remplacer les chaînes mais, au lieu de commencer par le début comme le 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>'
Réponses:
la source
.replace
méthode prend un troisième argument optionnel 'count' qui lui dit de remplacer les n premières occurrences. N'aurait-il pas été intuitif si cela prendrait un -1 mais malheureusement ce ne sera pas le cas, nous avons donc besoin de votre solution.Je ne vais pas prétendre que c'est la manière la plus efficace de le faire, mais c'est une manière simple. Il inverse toutes les chaînes en question, effectue un remplacement ordinaire en utilisant
str.replace
les chaînes inversées, puis inverse le résultat dans le bon sens:la source
Voici un one-liner:
et un exemple complet de ceci en cours d'utilisation:
la source
line = "".join(line.rsplit(",", 1))
tout en gardant l'espace de remplissage par la suite.Inversez simplement la chaîne, remplacez la première occurrence et inversez-la à nouveau:
Production:
la source
Si vous savez que l'ancienne chaîne ne contient aucun caractère spécial, vous pouvez le faire avec une expression régulière:
la source
Voici une solution récursive au problème:
la source