Как заменить некоторые символы из конца строки?

Я хочу заменить символы в конце строки python. У меня есть эта строка:

 s = "123123"

Я хочу заменить последний 2 на x. Предположим, что существует метод под названием replace_last:

 r = replace_last(s, '2', 'x')
 print r
 1231x3

Есть ли встроенный или простой способ сделать это?

Ответы

Ответ 1

Это именно то, что используется для функции rpartition для:

rpartition (...)     S.rpartition(sep) → (head, sep, tail)

Search for the separator sep in S, starting at the end of S, and return
the part before it, the separator itself, and the part after it.  If the
separator is not found, return two empty strings and S.

Я написал эту функцию, в которой показано, как использовать rpartition в вашем прецеденте:

def replace_last(source_string, replace_what, replace_with):
    head, _sep, tail = source_string.rpartition(replace_what)
    return head + replace_with + tail

s = "123123"
r = replace_last(s, '2', 'x')
print r

Вывод:

1231x3

Ответ 2

Использование функции регулярного выражения re.sub для замены слов в конце строки

import re
s = "123123"
s = re.sub('23$', 'penguins', s)
print s

Печать:

1231penguins

или же

import re
s = "123123"
s = re.sub('^12', 'penguins', s)
print s

Печать:

penguins3123

Ответ 3

Это одна из немногих строковых функций, которая не имеет левой и правой версии, но мы можем имитировать поведение, используя некоторые из строковых функций, которые делают.

>>> s = '123123'
>>> t = s.rsplit('2', 1)
>>> u = 'x'.join(t)
>>> u
'1231x3'

или

>>> 'x'.join('123123'.rsplit('2', 1))
'1231x3'

Ответ 4

>>> s = "aaa bbb aaa bbb"
>>> s[::-1].replace('bbb','xxx',1)[::-1]
'aaa bbb aaa xxx'

Для вашего второго примера

>>> s = "123123"
>>> s[::-1].replace('2','x',1)[::-1]
'1231x3'

Ответ 5

Вот решение, основанное на упрощенной интерпретации вашего вопроса. Для лучшего ответа потребуется дополнительная информация.

>>> s = "aaa bbb aaa bbb"
>>> separator = " "
>>> parts = s.split(separator)
>>> separator.join(parts[:-1] + ["xxx"])
'aaa bbb aaa xxx'

Обновление

(После просмотра отредактированного вопроса) еще один очень конкретный ответ.

>>> s = "123123"
>>> separator = "2"
>>> parts = s.split(separator)
>>> separator.join(parts[:-1]) + "x" + parts[-1]
'1231x3'

Обновление 2

Существует намного лучший способ . Courtesy @mizipzor.

Ответ 6

Когда требуемое совпадение находится в конце строки, re.sub приходит на помощь.

>>> import re
>>> s = "aaa bbb aaa bbb"
>>> s
'aaa bbb aaa bbb'
>>> re.sub('bbb$', 'xxx', s)
'aaa bbb aaa xxx'
>>>