HOWTO · Python

Substituir caractere em uma string em Python

Aprenda a substituir um caractere pela posição ou a substituir os caracteres correspondentes em uma string do Python.

Nesta página

Strings em Python são imutáveis, portanto não é possível atribuir diretamente um novo caractere a uma string existente. Em vez disso, crie uma nova string com o valor alterado. Use uma lista quando precisar editar uma posição, replace() para alterar trechos correspondentes ou fatiamento quando já souber a posição. bytearray() é adequado para dados orientados a bytes, como ASCII, mas seus índices se referem a bytes, não a caracteres Unicode em geral.

Use list() e join() para substituir um caractere em uma string

Converta a string usando a função integrada list(), atribua o caractere substituto ao índice baseado em zero e junte os caracteres novamente. Chame join() em uma string separadora para combinar os itens da lista; "" não insere nenhum separador. Por exemplo, o índice 2 corresponde ao terceiro caractere:

text = "Naze"
characters = list(text)
characters[2] = "m"
updated = "".join(characters)
print(updated)
Name

Essa abordagem altera uma posição e mantém intacto o valor da string original; updated se refere ao novo texto formado pela junção. O índice precisa corresponder a um item da lista, então confira o tamanho da string quando a posição vier da entrada do usuário.

Use bytearray() para substituir um caractere em uma string

Para texto orientado a bytes, primeiro codifique a string, atribua um valor inteiro a um byte na bytearray() mutável e, em seguida, decodifique os bytes para obter uma string novamente. Este exemplo usa ASCII, em que cada caractere mostrado é representado por um byte:

text = "Naze"
data = bytearray(text, "ascii")
data[2] = ord("m")
updated = data.decode("ascii")
print(updated)
Name

A codificação e a decodificação precisam usar codificações de caracteres compatíveis. Em geral, o índice de um byte não corresponde ao índice de um caractere Unicode: um caractere fora do ASCII pode ocupar vários bytes em UTF-8. Use essa técnica somente quando a codificação dos dados e as posições em bytes fizerem parte do problema; para texto comum, prefira as abordagens baseadas em strings.

Use o método replace() para substituir caracteres correspondentes em uma string

Chame o método de string replace() passando o texto antigo e o novo. Por padrão, ele altera todas as ocorrências não sobrepostas do texto antigo e retorna o resultado em uma nova string:

text = "Naze"
updated = text.replace("z", "m")
print(updated)
Name

O valor original de text permanece inalterado. Se quiser alterar apenas uma quantidade limitada de correspondências, passe essa quantidade como terceiro argumento opcional, por exemplo: text.replace("a", "o", 1). Se o texto antigo não estiver presente, replace() retorna o texto sem alterações; isso pode ajudar a diferenciar um erro de grafia de um problema de atribuição.

Use fatiamento e concatenação para substituir um caractere em uma posição conhecida

Quando souber a posição baseada em zero, obtenha o prefixo anterior a ela, adicione o caractere substituto e acrescente o sufixo posterior. O fatiamento text[:2] mantém as posições anteriores ao índice 2, enquanto text[3:] começa depois desse caractere:

text = "Naze"
updated = text[:2] + "m" + text[3:]
print(updated)
Name

Isso cria uma nova string e preserva o prefixo e o sufixo ao redor. Verifique se o sufixo começa uma posição após o caractere substituído; um índice incorreto pode omitir ou duplicar um caractere. Escolha essa forma quando a posição já for conhecida e a expressão for clara para o seu caso de uso; não há comparação de velocidade aqui.