Reemplazo de instancias de un carácter en una cadena

Este código simple que simplemente intenta reemplazar los puntos y comas (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 esto para reemplazar los puntos y comas por dos puntos? El uso de reemplazar no funciona, ya que esa función no tiene índice; puede haber algunos puntos y comas que no deseo reemplazar.

Ejemplo

En la cadena podría tener cualquier número de puntos y coma, por ejemplo, “Hei der!; Hello there;!;”

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

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

Utilice .replace() lugar:

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

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

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

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

Puede hacer lo siguiente, para reemplazar cualquier char con un char respectivo en un índice dado, si no desea usar .replace()

 word = 'python' index = 4 char = 'i' word = word[:index] + char + word[index + 1:] print word o/p: pythin 

Convierte la cadena en una lista; A continuación, puede cambiar los caracteres de forma individual. Luego puedes volver a ponerlo junto 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 

Si desea reemplazar un solo punto y coma:

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

Sin embargo, lo he probado.

Esto debería abarcar un caso un poco más general, pero debería poder personalizarlo para su propósito

 def selectiveReplace(myStr): answer = [] for index,char in enumerate(myStr): if char == ';': if index%2 == 1: # replace ';' in even indices with ":" answer.append(":") else: answer.append("!") # replace ';' in odd indices with "!" else: answer.append(char) return ''.join(answer) 

Espero que esto ayude

Si está reemplazando por un valor de índice especificado en la variable ‘n’, intente lo siguiente:

 def missing_char(str, n): str=str.replace(str[n],":") return str 

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

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

Salida: en * ia

Además, si desea reemplazar say * para todas las apariciones del primer carácter, excepto el primer carácter, ej. string = babble output = ba ** le

Código:

 name = "babble" front= name [0:1] fromSecondCharacter = name [1:] back=fromSecondCharacter.replace(front,'*') return front+back 

Qué tal esto:

 sentence = 'After 1500 years of that thinking surpressed' sentence = sentence.lower() def removeLetter(text,char): result = '' for c in text: if c != char: result += c return text.replace(char,'*') text = removeLetter(sentence,'a') 

Para reemplazar un carácter en un índice específico, la función es la siguiente:

 def replace_char(s , n , c): n-=1 s = s[0:n] + s[n:n+1].replace(s[n] , c) + s[n+1:] return s 

donde s es una cadena, n es índice y c es un carácter.