J'ai donc une longue liste de chaînes dans le même format, et je veux trouver le dernier "." caractère dans chacun d'eux, et remplacez-le par ". -". J'ai essayé d'utiliser rfind, mais je n'arrive pas à l'utiliser correctement pour ce faire.
J'ai donc une longue liste de chaînes dans le même format, et je veux trouver le dernier "." caractère dans chacun d'eux, et remplacez-le par ". -". J'ai essayé d'utiliser rfind, mais je n'arrive pas à l'utiliser correctement pour ce faire.
Réponses:
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:]
Pour remplacer par la droite:
def replace_right(source, target, replacement, replacements=None):
return replacement.join(source.rsplit(target, replacements))
Utilisé:
>>> replace_right("asd.asd.asd.", ".", ". -", 1)
'asd.asd.asd. -'
replacements=None
paramètre me semble être une erreur car si le paramètre est omis, la fonction donnera une erreur (essayé en Python 2.7). Je suggérerais de supprimer la valeur par défaut, de la définir sur -1 (pour des remplacements illimités) ou de mieux la faire replacements=1
(ce qui, à mon avis, devrait être le comportement par défaut pour cette fonction particulière en fonction de ce que veut l'OP). Selon la documentation, ce paramètre est facultatif, mais il doit être un int s'il est donné.
". -".join("asd.asd.asd.".rsplit(".", 1))
. Tout ce que vous faites est d'effectuer une séparation de chaîne du côté droit pour 1 occurrence et de joindre à nouveau la chaîne en utilisant le remplacement.
J'utiliserais un regex:
import re
new_list = [re.sub(r"\.(?=[^.]*$)", r". - ", s) for s in old_list]
\.(?=[^.]*$)
Une seule ligne serait:
str=str[::-1].replace(".",".-",1)[::-1]
.replace
sur une chaîne inversée. Les deux chaînes passées doivent replace
également être inversées. Sinon, lorsque vous inversez la chaîne une deuxième fois, les lettres que vous venez d'insérer seront à l'envers. Vous ne pouvez l'utiliser que si vous remplacez une lettre par une lettre, et même dans ce cas, je ne mettrais pas cela dans votre code au cas où quelqu'un devrait le changer à l'avenir et commencer à se demander pourquoi un mot est écrit sdrawkcab.
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]
a = "A long string with a . in the middle ending with ."
# si vous voulez trouver l'index de la dernière occurrence de n'importe quelle chaîne, dans notre cas, nous trouverons # l'index de la dernière occurrence de avec
index = a.rfind("with")
# le résultat sera 44, car l'index commence à 0.
Approche naïve:
a = "A long string with a . in the middle ending with ."
fchar = '.'
rchar = '. -'
a[::-1].replace(fchar, rchar[::-1], 1)[::-1]
Out[2]: 'A long string with a . in the middle ending with . -'
La réponse d'Aditya Sihag avec un seul rfind
:
pos = a.rfind('.')
a[:pos] + '. -' + a[pos+1:]
a
?
'. -'
dans la sortie.
replace_right
êtes beaucoup plus gentil)