Как заменить некоторые символы в конце строки? - PullRequest
24 голосов
/ 09 сентября 2010

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

 s = "123123"

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

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

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

Ответы [ 6 ]

32 голосов
/ 09 сентября 2010

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

rpartition (...) S.rpartition (сеп) -> (голова, сеп, хвост)

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
24 голосов
/ 09 сентября 2010

Использование функции регулярного выражения 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
7 голосов
/ 09 сентября 2010

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

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

или

>>> 'x'.join('123123'.rsplit('2', 1))
'1231x3'
6 голосов
/ 09 сентября 2010
>>> 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'
2 голосов
/ 09 сентября 2010

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

>>> import re
>>> s = "aaa bbb aaa bbb"
>>> s
'aaa bbb aaa bbb'
>>> re.sub('bbb$', 'xxx', s)
'aaa bbb aaa xxx'
>>> 
2 голосов
/ 09 сентября 2010

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

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

Существует гораздо лучший способ сделать это . Предоставлено * 10101*@mizipzor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...