Найти последнее вхождение подстроки в строку, заменив ее


Так у меня есть длинный список строк в том же формате, и я хочу найти последнего "."символ в каждом из них, и заменить его ". - " . Я пробовал использовать rfind, но я не могу использовать его должным образом, чтобы сделать это.

5 81

5 ответов:

это должно помочь

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:]

заменить справа:

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

используется:

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

Я бы использовал регулярное выражение:

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

один лайнер будет :

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

наивный подход:

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 . -'

сихаг также Адитья с одного rfind:
pos = a.rfind('.')
a[:pos] + '. -' + a[pos+1:]