How do I change the 3rd and 5th occurrence of a word in a string

4

Someone can help me in this, I need to change the 3 and 5 occurrence of a word in a text, I can not change the other occurrences.

Texto=input("Digite o Texto: ") #recebendo o texto do usuario

Palavra=input("Digite a Palavra: ")#Recebendo a palavra do usuario

cont=Texto.count(Palavra) #atribuindo a cont...

print(cont) #Imprimindo a quantidade de ocorrencias da palavra


Text_Aux=Texto.replace(Palavra, "TROCADO",3)#trocando as 3 primeiras ocorrencias

Texto=Text_Aux# atribuindo a string auxiliar a original
    
asked by anonymous 14.08.2016 / 19:11

2 answers

4

You can do this:

my_str = 'Isto é o meu texto , sim é o meu querido texto , gosto muito deste texto ... Melhor texto do mundo, sim é um texto '
words = my_str.split()
words_count = {}
for k, val in enumerate(words):
    words_count[val] = words_count.get(val, 0) + 1 # caso val não haja como chave do dict vamos colocar o valor 0 e somar 1
    if words_count[val] == 3:
        words[k] = 'YOOOOOO'
    elif words_count[val] == 5:
        words[k] = 'HEYYYYYYY'
new_str = ' '.join(words)
print(new_str) # Isto é o meu texto , sim é o meu querido texto , gosto muito deste YOOOOOO ... Melhor texto do mundo, sim YOOOOOO um HEYYYYYYY

In this case the word "is" is repeated 3 times and changed in the last (third occurrence) and the word "text" is repeated 5 times, changed in the third and fifth occurrence

    
14.08.2016 / 19:24
2

The question has already been very well answered by Miguel , below is an alternative which handles string indices:

def trocar (texto, substituir, substituto, ocorrencias):
    indice = texto.find(substituir)
    cont = texto.count(substituir)
    ret = texto
    n = 1

    while indice >= 0 and n <= cont:
        if n in ocorrencias:
            ret = ret[:indice] + substituto + ret[len(substituir) + indice:]        
        indice = ret.find(substituir, indice + len(substituto))
        n += 1

    return cont, ret

The function returns a tuple with the number of occurrences of the word in the string , and the modified text.

Example usage:

texto = "xxxxxxxxxxxxxxx"
#         ↑  ↑  ↑  ↑  ↑
#         1  2  3  4  5

print(trocar(texto, "xxx", "AAA", [1, 2])) # (5, 'AAAAAAxxxxxxxxx')
print(trocar(texto, "xxx", "BBB", [2, 3])) # (5, 'xxxBBBBBBxxxxxx')
print(trocar(texto, "xxx", "CCC", [3, 4])) # (5, 'xxxxxxCCCCCCxxx')
print(trocar(texto, "xxx", "DDD", [4, 5])) # (5, 'xxxxxxxxxDDDDDD')

View demonstração

In your case, you can call it like this:

texto = input("Digite o texto: ")
palavra = input("Digite a palavra: ")

cont, trocado = trocar(texto, palavra, "YYY", [3, 5])
print ("{} aparece {} em {}\n".format(palavra, cont, texto))

print (texto)
print (trocado)

# Exemplo de saída
#   Digite o texto: foo foo foo foo bar foo
#   Digite a palavra: foo
#   foo aparece 5 em foo foo foo foo bar foo

#   foo foo foo foo bar foo
#   foo foo YYY foo bar YYY
    
15.08.2016 / 01:57