Как заменить некоторые символы из конца строки?
Я хочу заменить символы в конце строки 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'
>>>