Substituindo a última ocorrência de uma string. (Python)

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:

 

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’.

 

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.

O que fiz acima foi:

  1. Criar uma string que vai armazenar nossa frase alterada;
  2. Formatar esta string para preencher os placeholders
  3. Na formatação:
    1. text[:str_pos] : recupera todo o  texto da variável até a o inicio da última ocorrência da palavra fox.
    2. “dog” : este é o segundo argumento do .format. Neste ponto que a palavra dog vai entrar no lugar da palavra fox;
    3. 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!

The following two tabs change content below.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, Python and tagged , , , , .