Right-to-left string replace in Python?

rsplit and join could be used to simulate the effects of an rreplace

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

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

The regex engine cosumes all the string and then starts backtracking untill iss is found. Then it replaces the found string with the needed pattern.


Some speed tests

The solution with [::-1] turns out to be faster.

The solution with re was only faster for long strings (longer than 1 million symbols).


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

you may reverse a string like so:

myStr[::-1]

to replace just add the .replace:

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

however now your string is backwards, so re-reverse it:

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

and you're done. If your replace strings are static just reverse them in file to reduce overhead. If not, the same trick will work.

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

Tags:

Python

String