Pular para o conteúdo

Como usar a função replace no Python?

[

Como substituir uma string em Python

Por Ian Currie

Se você está procurando maneiras de remover ou substituir toda ou parte de uma string em Python, este tutorial é para você. Você estará trabalhando com um transcript fictício de uma sala de chat e realizando a sanitização do texto, tanto usando o método .replace() quanto a função re.sub().

Como remover ou substituir uma string ou substring em Python

A maneira mais básica de substituir uma string em Python é usar o método de string .replace():

>>> "Python Falso".replace("Falso", "Real")
'Python Real'

Como você pode ver, você pode encadear .replace() em qualquer string e fornecer ao método dois argumentos. O primeiro é a string que você deseja substituir e o segundo é a substituição.

Observação: Embora o shell do Python exiba o resultado de .replace(), a própria string permanece inalterada. Você pode ver isso mais claramente atribuindo sua string a uma variável:

>>> nome = "Python Falso"
>>> nome.replace("Falso", "Real")
'Python Real'
>>> nome
'Python Falso'
>>> nome = nome.replace("Falso", "Real")
'Python Real'
>>> nome
'Python Real'

Observe que quando você simplesmente chama .replace(), o valor de nome não muda. Mas quando você atribui o resultado de nome.replace() à variável nome, 'Python Falso' se torna 'Python Real'.

Agora é hora de aplicar esse conhecimento ao transcript.

transcript = """\
[suporte_tom] 2022-08-24T10:02:23+00:00 : Em que posso ajudar?
[johndoe] 2022-08-24T10:03:15+00:00 : NÃO CONSIGO ACESSAR MINHA CONTA MALDITA
[suporte_tom] 2022-08-24T10:03:30+00:00 : Tem certeza de que não é o caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : Maldição! Você está certo!"""

Agora vamos substituir a palavra “MALDITA” por um emoji.

transcript.replace("MALDITA", "😤")

A saída será:

[suporte_tom] 2022-08-24T10:02:23+00:00 : Em que posso ajudar?
[johndoe] 2022-08-24T10:03:15+00:00 : NÃO CONSIGO ACESSAR MINHA CONTA 😤
[suporte_tom] 2022-08-24T10:03:30+00:00 : Tem certeza de que não é o caps lock?
[johndoe] 2022-08-24T10:04:03+00:00 : Maldição! Você está certo!

A palavra “MALDITA” foi substituída pelo emoji 😤. Você pode aplicar o método .replace() a qualquer string em Python para substituir uma determinada substring.

Configurando várias regras de substituição

Agora imagine que você precisa substituir várias palavras ou frases em uma string. Em vez de encadear vários .replace() sucessivos, você pode criar um dicionário com as palavras-chave a serem substituídas e suas substituições correspondentes.

Por exemplo:

regras_de_substituicao = {
"MALDITA": "😤",
"caps lock": "CAIXA ALTA",
"certeza de que": "tenho certeza de que"
}

Agora, vamos usar esse dicionário para percorrer a string do transcript e substituir as palavras ou frases correspondentes:

for palavra, substituicao in regras_de_substituicao.items():
transcript = transcript.replace(palavra, substituicao)

O resultado será o seguinte:

[suporte_tom] 2022-08-24T10:02:23+00:00 : Em que posso ajudar?
[johndoe] 2022-08-24T10:03:15+00:00 : NÃO CONSIGO ACESSAR MINHA CONTA 😤
[suporte_tom] 2022-08-24T10:03:30+00:00 : Tem tenho certeza de que não é o CAIXA ALTA?
[johndoe] 2022-08-24T10:04:03+00:00 : Maldição! Você está certo!

Todas as palavras ou frases definidas nas regras de substituição foram substituídas pela respectiva substituição. Dessa forma, você pode aplicar várias regras de substituição em uma única iteração.

Utilizando re.sub() para criar regras mais complexas

Até agora, trabalhamos apenas com strings literais. No entanto, suponha que você queira fazer substituições mais complexas, como substituir todas as ocorrências de uma palavra independente de maiúsculas ou minúsculas, ou substituir strings que correspondam a um determinado padrão. Para esses casos, você pode usar a função re.sub() do módulo re.

A função re.sub() permite que você substitua todas as ocorrências de um padrão em uma string por outra string ou pelo resultado de uma função de chamada. Isso significa que você pode criar regras de substituição mais complexas, usando expressões regulares.

Por exemplo, vamos substituir todas as ocorrências das palavras “que” e “o” por um emoji na string do transcript:

import re
transcript = re.sub(r'\bque\b', '🤷‍♂️', transcript)
transcript = re.sub(r'\bo\b', '🤔', transcript)

A saída será:

[suporte_tom] 2022-08-24T10:02:23+00:00 : Em 🤷‍♂️ posso ajudar?
[johndoe] 2022-08-24T10:03:15+00:00 : NÃO CONSIGO ACESSAR MINHA CONTA 😤
[suporte_tom] 2022-08-24T10:03:30+00:00 : Tem tenho certeza de 🤷‍♂️ não é 🤷‍♂️ CAIXA ALTA?
[johndoe] 2022-08-24T10:04:03+00:00 : Maldição! Você está certo!

As palavras “que” e “o” foram substituídas pelos respectivos emojis 🤷‍♂️ e 🤔 usando expressões regulares.

Usando um retorno de chamada com re.sub() para um controle ainda maior

A função re.sub() também permite que você use um retorno de chamada para ter um controle ainda maior sobre as substituições. Em vez de fornecer uma string de substituição fixa, você pode fornecer uma função que será chamada para cada correspondência encontrada.

Vamos supor que você queira substituir a palavra “certa” por “errada” e a palavra “errada” por “certa”. Podemos criar uma função de retorno de chamada que troca essas palavras:

def inverter_palavras(match):
palavra = match.group(0)
if palavra == "certa":
return "errada"
elif palavra == "errada":
return "certa"
return palavra
transcript = re.sub(r'\b(certa|errada)\b', inverter_palavras, transcript)

A saída será:

[suporte_tom] 2022-08-24T10:02:23+00:00 : Em que posso ajudar?
[johndoe] 2022-08-24T10:03:15+00:00 : NÃO CONSIGO ACESSAR MINHA CONTA 😤
[suporte_tom] 2022-08-24T10:03:30+00:00 : Tem tenho errada de que não é o CAIXA ALTA?
[johndoe] 2022-08-24T10:04:03+00:00 : Maldição! Você está certa!

A palavra “certa” foi substituída por “errada” e a palavra “errada” foi substituída por “certa” usando a função de retorno de chamada inverter_palavras().

Aplicando o retorno de chamada ao script

Agora que você entende como usar o retorno de chamada com re.sub(), você pode criar funções de retorno de chamada mais complexas para manipular as substituições de acordo com suas necessidades específicas. Por exemplo, você pode usar o retorno de chamada para substituir palavrões por emojis ou para aplicar regras específicas de sanitização a diferentes partes do texto.

def callback(match):
palavra = match.group(0)
# Adicione suas regras de substituição personalizadas aqui
return palavra
transcript = re.sub(r'\b(palavra1|palavra2|palavra3)\b', callback, transcript)

A partir daqui, é possível personalizar as regras de substituição de acordo com a lógica desejada.

Conclusão

Neste tutorial, você aprendeu como substituir strings em Python usando o método .replace() e a função re.sub(). Você também viu como configurar várias regras de substituição, aproveitar as capacidades das expressões regulares e usar retornos de chamada para ter um controle ainda maior sobre as substituições.

Ao dominar essas técnicas, você pode facilmente substituir e remover strings em seus projetos Python, seja para sanitizar dados, filtrar palavras, ou qualquer outra aplicação necessária.

Lembre-se de experimentar diferentes exemplos e explorar mais recursos das funções .replace() e re.sub() para aprimorar suas habilidades em manipulação de strings em Python.