Reemplazo de instancias de un carácter en una cadena

Resuelto The Unfun Cat asked hace 12 años • 17 respuestas

Este código simple que simplemente intenta reemplazar el punto y coma (en las posiciones especificadas por i) por dos puntos no funciona:

for i in range(0,len(line)):
     if (line[i]==";" and i in rightindexarray):
         line[i]=":"

da el error

line[i]=":"
TypeError: 'str' object does not support item assignment

¿Cómo puedo solucionar este problema para reemplazar el punto y coma por dos puntos? El uso de reemplazar no funciona ya que esa función no requiere índice; es posible que haya algunos puntos y comas que no desee reemplazar.

Ejemplo

En la cadena podría tener cualquier número de puntos y coma, por ejemplo, "Hei der!; Hola;!;"

Sé cuáles quiero reemplazar (tengo su índice en la cadena). Usar reemplazar no funciona porque no puedo usar un índice con él.

The Unfun Cat avatar Oct 04 '12 15:10 The Unfun Cat
Aceptado

Las cadenas en Python son inmutables, por lo que no puede tratarlas como una lista y asignarlas a índices.

Utilice .replace()en su lugar:

line = line.replace(';', ':')

Si necesita reemplazar solo ciertos puntos y coma, deberá ser más específico. Podrías usar el corte para aislar la sección de la cadena a reemplazar:

line = line[:10].replace(';', ':') + line[10:]

Eso reemplazará todos los puntos y coma en los primeros 10 caracteres de la cadena.

Martijn Pieters avatar Oct 04 '2012 09:10 Martijn Pieters

Puede hacer lo siguiente para reemplazar cualquier carácter con un carácter respectivo en un índice determinado, si no desea utilizar.replace()

word = 'python'
index = 4
char = 'i'

word = word[:index] + char + word[index + 1:]
print word

o/p: pythin
Dineshs91 avatar Sep 02 '2015 07:09 Dineshs91

Convierta la cadena en una lista; luego puedes cambiar los personajes individualmente. Luego puedes volver a armarlo con .join:

s = 'a;b;c;d'
slist = list(s)
for i, c in enumerate(slist):
    if slist[i] == ';' and 0 <= i <= 3: # only replaces semicolons in the first part of the text
        slist[i] = ':'
s = ''.join(slist)
print s # prints a:b:c;d
nneonneo avatar Oct 04 '2012 09:10 nneonneo

Si desea reemplazar un solo punto y coma:

for i in range(0,len(line)):
 if (line[i]==";"):
     line = line[:i] + ":" + line[i+1:]

Aunque no lo he probado.

Vic avatar Oct 04 '2012 09:10 Vic

No se puede simplemente asignar valor a un carácter en la cadena. Utilice este método para reemplazar el valor de un carácter en particular:

name = "India"
result=name .replace("d",'*')

Salida: In*ia

Además, si desea reemplazar, diga * para todas las apariciones del primer carácter excepto el primer carácter, por ejemplo. cadena = balbuceo salida = batalla

Código:

name = "babble"
front= name [0:1]
fromSecondCharacter = name [1:]
back=fromSecondCharacter.replace(front,'*')
return front+back
Darshan Jain avatar Dec 15 '2017 13:12 Darshan Jain