Substituindo a última ocorrência de uma string. (Python)
Overview
Alguma vez você já precisou substituir apenas a última ocorrência de uma palavra em uma string e não sabia como fazer isso de forma simples? No post de hoje, vamos desvendar uma técnica interessante e acessível para realizar essa tarefa, mostrando que nem sempre precisamos recorrer a soluções complexas. Com um exemplo pragmático e fácil de seguir, você vai aprender a manusear strings de maneira mais eficaz em Python. Prepare-se para adicionar mais uma ferramenta ao seu kit de desenvolvimento!
Para substituir parte de uma string, geralmente utilizamos a função replace. Todavia, ela substitui todas as ocorrências de uma substring e nem sempre é isso que queremos. Neste post, mostro como substituir apenas a última ocorrência.
O procedimento todo é bem simples. Vamos considerar a seguinte frase:
text = "The quick brown fox jumps over the lazy fox."
Na frase acima (armazenada na variável text), quero substituir apenas a última ocorrência de fox por dog. Para isso, vou precisar de mais uma variável, que vai armazenar a posição da última ocorrência de “fox”.
str_pos = text.rfind("fox")
Agora temos a posição onde a palavra fox começa. O que vamos fazer para substituir é simples: Pegar o texto até onde começa a última ocorrência da palavra fox, incluir dog e depois colocar o resto do texto.
Não acho esta uma técnica particularmente elegante, mas resolve o problema.
new_text = "{text_before_replace}{str_find}{rest_of_text}".format(text_before_replace=text[:str_pos], str_find="dog", rest_of_text=text[str_pos+len(str_find):])
O que fiz acima foi:
- Criar uma string que vai armazenar nossa frase alterada;
- Formatar esta string para preencher os placeholders
- Na formatação:
- text[:str_pos] : recupera todo o texto da variável até a o inicio da última ocorrência da palavra fox.
- “dog” : este é o segundo argumento do .format. Neste ponto que a palavra dog vai entrar no lugar da palavra fox;
- text[str_pos+3:] : neste ponto, retiro outro slice da variável de texto, mas agora pegando a parte que vem após a palavra fox. A ideia é pegar tudo após a palavra fox, ou seja, da posição onde a palavra começa (str_pos) + o tamanho da palavra (+3, pois fox tem 3 letras).
Com a técnica acima, conseguimos substituir apenas a última ocorrência. Poderíamos utilizar regex também, mas acho que seria ainda menos eficiente.
Espero ter ajudado!