rreplace - ¿Cómo reemplazar la última aparición de una expresión en una cadena?
¿Existe una forma rápida en Python de reemplazar cadenas pero, en lugar de comenzar desde el principio como replace
lo hace, comenzar desde el final? Por ejemplo:
>>> def rreplace(old, new, occurrence)
>>> ... # Code to replace the last occurrences of old by new
>>> '<div><div>Hello</div></div>'.rreplace('</div>','</bad>',1)
>>> '<div><div>Hello</div></bad>'
Aceptado
>>> def rreplace(s, old, new, occurrence):
... li = s.rsplit(old, occurrence)
... return new.join(li)
...
>>> s
'1232425'
>>> rreplace(s, '2', ' ', 2)
'123 4 5'
>>> rreplace(s, '2', ' ', 3)
'1 3 4 5'
>>> rreplace(s, '2', ' ', 4)
'1 3 4 5'
>>> rreplace(s, '2', ' ', 0)
'1232425'
Aquí hay una sola línea :
result = new.join(s.rsplit(old, maxreplace))
Devuelve una copia de la cadena s con todas las apariciones de la subcadena antigua reemplazadas por nueva . Se reemplazan las primeras apariciones de maxreplace .
y un ejemplo completo de esto en uso:
s = 'mississipi'
old = 'iss'
new = 'XXX'
maxreplace = 1
result = new.join(s.rsplit(old, maxreplace))
>>> result
'missXXXipi'
No voy a pretender que esta sea la forma más eficaz de hacerlo, pero es una forma sencilla. Invierte todas las cadenas en cuestión, realiza un reemplazo normal usando str.replace
las cadenas invertidas y luego invierte el resultado al revés:
>>> def rreplace(s, old, new, count):
... return (s[::-1].replace(old[::-1], new[::-1], count))[::-1]
...
>>> rreplace('<div><div>Hello</div></div>', '</div>', '</bad>', 1)
'<div><div>Hello</div></bad>'