107 votes

Trouver la dernière occurrence d'une sous-chaîne dans une chaîne de caractères et la remplacer.

J'ai donc une longue liste de chaînes de caractères dans le même format, et je veux trouver le dernier caractère "." dans chacune d'elles, et le remplacer par ". - ". J'ai essayé d'utiliser rfind, mais je n'arrive pas à l'utiliser correctement pour faire cela.

168voto

Aditya Sihag Points 1510

Cela devrait le faire

old_string = "this is going to have a full stop. some written sstuff!"
k = old_string.rfind(".")
new_string = old_string[:k] + ". - " + old_string[k+1:]

28voto

Varinder Singh Points 664

Pour remplacer à partir de la droite :

def replace_right(source, target, replacement, replacements=None):
    return replacement.join(source.rsplit(target, replacements))

En cours d'utilisation :

>>> replace_right("asd.asd.asd.", ".", ". -", 1)
'asd.asd.asd. -'

15voto

Tim Pietzcker Points 146308

J'utiliserais une regex :

import re
new_list = [re.sub(r"\.(?=[^.]*$)", r". - ", s) for s in old_list]

6voto

mazs Points 328

Une phrase courte serait :

str=str[::-1].replace(".",".-",1)[::-1]

1voto

bambuste Points 137

Vous pouvez utiliser la fonction ci-dessous qui remplace la première occurrence du mot de droite.

def replace_from_right(text: str, original_text: str, new_text: str) -> str:
    """ Replace first occurrence of original_text by new_text. """
    return text[::-1].replace(original_text[::-1], new_text[::-1], 1)[::-1]

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