¿Cómo reemplazar algunos caracteres del final de una cadena?

Quiero reemplazar los caracteres al final de una cadena de python. Tengo esta cadena:

s = "123123" 

Quiero reemplazar los últimos 2 con x . Supongamos que hay un método llamado replace_last :

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

¿Hay algún método integrado o fácil para hacer esto?

Esto es exactamente para lo que se rpartition función 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. 

Escribí esta función que muestra cómo usar rpartition en su caso de uso:

 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 

Salida:

 1231x3 

Usando la función de expresión regular re.sub para reemplazar palabras al final de la cadena

 import re s = "123123" s = re.sub('23$', 'penguins', s) print s 

Huellas dactilares:

 1231penguins 

o

 import re s = "123123" s = re.sub('^12', 'penguins', s) print s 

Huellas dactilares:

 penguins3123 

Esta es una de las pocas funciones de cadena que no tiene una versión izquierda y derecha, pero podemos imitar el comportamiento utilizando algunas de las funciones de cadena que sí lo tienen.

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

o

 >>> 'x'.join('123123'.rsplit('2', 1)) '1231x3' 
 >>> s = "aaa bbb aaa bbb" >>> s[::-1].replace('bbb','xxx',1)[::-1] 'aaa bbb aaa xxx' 

Para tu segundo ejemplo

 >>> s = "123123" >>> s[::-1].replace('2','x',1)[::-1] '1231x3' 

Cuando la coincidencia deseada está al final de la cadena, re.sub viene al rescate.

 >>> import re >>> s = "aaa bbb aaa bbb" >>> s 'aaa bbb aaa bbb' >>> re.sub('bbb$', 'xxx', s) 'aaa bbb aaa xxx' >>> 

Aquí hay una solución basada en una interpretación simplista de su pregunta. Una mejor respuesta requerirá más información.

 >>> s = "aaa bbb aaa bbb" >>> separator = " " >>> parts = s.split(separator) >>> separator.join(parts[:-1] + ["xxx"]) 'aaa bbb aaa xxx' 

Actualizar

(Después de ver la pregunta editada) otra respuesta muy específica.

 >>> s = "123123" >>> separator = "2" >>> parts = s.split(separator) >>> separator.join(parts[:-1]) + "x" + parts[-1] '1231x3' 

Actualización 2

Hay mucho mejor manera de hacer esto . Cortesía de @mizipzor .