Módulo 12 - Trabalhando com textos

Procurando e substituindo: in, find, count e replace

10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Verificar se um texto contém outro usando o operador in.
  • Localizar a posição de um trecho com .find() e interpretar o resultado -1.
  • Contar ocorrências de um trecho com .count().
  • Substituir trechos de texto com .replace(velho, novo), lembrando que ele devolve uma string nova.

Achando texto com o operador in

Você já conhece o operador in de outro contexto: no módulo 10, ele respondeu se um item existia dentro de uma lista. Com strings, ele faz o serviço equivalente, responder se um pedaço de texto existe dentro de outro. O resultado é um bool, True ou False, o que encaixa o in direto dentro de um if, sem cerimônia.

mensagem = "vou pagar o boleto amanhã"

print("boleto" in mensagem)   # True
print("pix" in mensagem)      # False

if "boleto" in mensagem:
    print("Aviso: esta mensagem fala de boleto!")

O in responde se o trecho existe. Dentro do if, vira um detector de assunto.

Duas regras de jogo que evitam sustos. Primeira: a busca diferencia maiúsculas de minúsculas, então "Boleto" in mensagem daria False no exemplo acima. Quando a caixa não deve importar, normalize antes, com o .lower() da primeira aula: "boleto" in mensagem.lower(). Segunda: o in procura o trecho em qualquer lugar, inclusive dentro de palavras maiores. "olho" in "piolho" é True, o que às vezes é o que você quer e às vezes não é. Para este curso, basta saber que o comportamento existe.

find para a posição, count para a quantidade

O in responde se existe. Quando você precisa saber onde, o método é .find(): ele devolve a posição em que o trecho começa. E aqui reaparece uma regra que você conheceu ao acessar itens de lista no módulo 10: o Python conta posições a partir do zero. O primeiro caractere da string é a posição 0, o segundo é a 1, e assim por diante, com os espaços contando como caracteres normais.

mensagem = "vou pagar o boleto amanhã"

print(mensagem.find("boleto"))   # 12
print(mensagem.find("pix"))      # -1 (não encontrado)

frase = "python é divertido"
print(frase.count("i"))          # 2
print(frase.count("z"))          # 0

O find devolve a posição inicial (contando do zero) ou -1. O count devolve a quantidade.

O -1 merece atenção especial. Quando o trecho não existe, o .find() não quebra o programa nem devolve nada estranho: ele devolve -1, um valor combinado que significa não achei. Antes de usar uma posição vinda do .find(), teste se ela é diferente de -1. Já o .count() é mais tranquilo: conta quantas vezes o trecho aparece e devolve 0 quando não há nenhuma ocorrência, o que raramente exige tratamento especial.

FerramentaPergunta que respondeDevolve
"x" in textoO trecho existe?True ou False
texto.find("x")Onde o trecho começa?Posição (do zero) ou -1
texto.count("x")Quantas vezes aparece?Um número inteiro (0 se nenhuma)

Três perguntas, três ferramentas. Escolha pela pergunta que o seu programa precisa responder.

Trocando texto com replace

Fecha o trio de utilidades o método mais poderoso da aula: .replace(velho, novo) devolve uma cópia da string com todas as ocorrências do trecho velho trocadas pelo novo. Todas mesmo, de uma vez, sem loop. E, no espírito de tudo que você viu neste módulo, o original permanece intocado: o resultado é uma string nova, que você guarda numa variável se quiser mantê-la.

# Uso 1: censurar uma palavra num comentário
comentario = "esse produto é uma droga, que droga!"
censurado = comentario.replace("droga", "*****")
print(censurado)   # esse produto é uma *****, que *****!
print(comentario)  # o original continua inteiro

# Uso 2: corrigir um erro repetido num texto
texto = "o resultado depende do resultado anterior"
corrigido = texto.replace("resultado", "cálculo")
print(corrigido)   # o cálculo depende do cálculo anterior

Duas trocas reais. Repare que as DUAS ocorrências foram substituídas em cada caso.

Um truque que rende muito: trocar por texto vazio remove o trecho. cpf.replace(".", "").replace("-", "") limpa a pontuação de um CPF digitado como 111.222.333-44, deixando só os dígitos. Você vai usar exatamente essa ideia na prática do módulo, para contar as letras de um nome ignorando os espaços. E se quiser limitar a quantidade de trocas, o .replace() aceita um terceiro argumento com o máximo de substituições, embora o uso comum seja trocar tudo.

Com in, .find(), .count() e .replace(), você cobre a maior parte do trabalho de busca e correção de texto que um programa básico precisa. A próxima aula ataca outra frente: montar mensagens de saída bonitas e formatadas, com a ferramenta mais querida do Python moderno.

Teste rápido

Após texto = "bom dia" e texto.replace("dia", "noite") em linha solta, o que print(texto) mostra?

Perguntas frequentes

Qual a diferença entre usar in e usar .find()?
O in responde uma pergunta de sim ou não: o trecho existe? Já o .find() responde onde ele está, devolvendo a posição inicial ou -1. Se o seu if só precisa saber se existe, use in, que é mais legível. Reserve o .find() para quando a posição importa de verdade.
Por que o .find() devolve -1 em vez de dar erro?
Porque não encontrar um trecho é situação normal, não excepcional, e o -1 permite tratar isso com um if simples. Existe um método irmão, o .index(), que faz a mesma busca mas gera erro quando não encontra; ele combina com o try/except do módulo 14. Neste curso, o .find() com teste de -1 resolve.
O .replace() aceita trocar só a primeira ocorrência?
Aceita, pelo terceiro argumento opcional: texto.replace("a", "@", 1) troca só a primeira ocorrência. Sem esse argumento, ele troca todas. Na prática, trocar tudo é o comportamento mais usado, e o terceiro argumento fica para situações específicas.
Como faço uma busca que ignore maiúsculas e minúsculas?
Normalize os dois lados antes, com a técnica da primeira aula: "boleto" in mensagem.lower() encontra Boleto, BOLETO e boleto. O mesmo vale para .find() e .count(). O Python não adivinha a intenção; quem decide se a caixa importa é você, normalizando ou não.
O .count() conta ocorrências sobrepostas?
Não. "aaa".count("aa") devolve 1, não 2, porque depois de encontrar uma ocorrência a busca continua a partir do fim dela. É um detalhe que raramente afeta programas básicos, mas vale conhecer para não estranhar uma contagem menor que a esperada em padrões repetidos.
Dá para trocar vários trechos diferentes de uma vez?
Com o .replace() puro, o caminho é encadear: texto.replace(".", "").replace("-", ""), uma troca por método. Para padrões complexos, o Python tem o módulo re de expressões regulares, ferramenta poderosa que fica para etapas futuras da trilha. No nível básico, o encadeamento de replace cobre tudo o que você precisa.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.