Подтвердить что ты не робот

Строка справа налево заменяется на Python?

Я хочу сделать замену строки в Python, но только первый экземпляр идет справа налево. В идеальном мире я бы:

myStr = "mississippi"
print myStr.rreplace("iss","XXX",1)

> missXXXippi

Какой лучший способ сделать это, учитывая, что rreplace не существует?

4b9b3361

Ответ 1

rsplit и join могут использоваться для моделирования эффектов rreplace

>>> 'XXX'.join('mississippi'.rsplit('iss', 1))
'missXXXippi'

Ответ 2

>>> myStr[::-1].replace("iss"[::-1], "XXX"[::-1], 1)[::-1]
'missXXXippi'

Ответ 3

>>> re.sub(r'(.*)iss',r'\1XXX',myStr)
'missXXXippi'

Механизм regex использует всю строку и затем начинает откат до тех пор, пока не будет найден iss. Затем он заменяет найденную строку необходимым шаблоном.


Некоторая скорость тесты

Решение с [::-1] оказывается быстрее.

Решение с re было только быстрее для длинных строк (длиной более 1 миллиона символов).

Ответ 4

вы можете изменить строку следующим образом:

myStr[::-1]

для замены просто добавьте .replace:

print myStr[::-1].replace("iss","XXX",1)

однако теперь ваша строка обратная, поэтому переверните ее:

myStr[::-1].replace("iss","XXX",1)[::-1]

и все готово. Если ваши строки замены статические, просто отмените их в файле, чтобы уменьшить накладные расходы. Если нет, тот же трюк будет работать.

myStr[::-1].replace("iss"[::-1],"XXX"[::-1],1)[::-1]

Ответ 5

def rreplace(s, old, new):
    try:
        place = s.rindex(old)
        return ''.join((s[:place],new,s[place+len(old):]))
    except ValueError:
        return s

Ответ 6

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

"mississippi".reverse().replace('iss'.reverse(), 'XXX'.reverse(),1).reverse()