2017-09-22 1 views
2

Je sais que ce qui suit est comment remplacer une chaîne par une autre chaîne iinstance spécifique dans la chaîne - Python

line.replace(x, y)

Mais je veux seulement remplacer la deuxième instance de x dans la ligne. Comment tu fais ça? Merci

EDIT Je pensais que je serais en mesure de poser cette question sans entrer dans les détails mais malheureusement, aucune des réponses a fonctionné dans ma situation. J'écris dans un fichier texte et j'utilise le morceau de code suivant pour changer le fichier.

with fileinput.FileInput("Player Stats.txt", inplace=True, backup='.bak') as file: 
    for line in file: 
     print(line.replace(chosenTeam, teamName), end='') 

Mais si l'option selectedTeam survient plusieurs fois, toutes sont remplacées. Comment puis-je remplacer uniquement la ième instance dans cette situation.

+0

Reproduction possible de [Comment remplacer un ll occurrences d'une chaîne en JavaScript?] (https://stackoverflow.com/questions/1144783/how-to-replace-all-occurrences-of-a-string-in-javascript) – Antimony

+0

Il voulait dire python cependant. – oreofeolurin

+1

Copie possible de [Remplacer la nième occurrence de la sous-chaîne dans la chaîne] (https://stackoverflow.com/questions/35091557/replace-nth-occurrence-of-substring-in-string) – mentalita

Répondre

2

Bonus, c'est une méthode pour remplacer l'apparition "NTH" dans une chaîne

def nth_replace(str,search,repl,index): 
    split = str.split(search,index+1) 
    if len(split)<=index+1: 
     return str 
    return search.join(split[:-1])+repl+split[-1] 

exemple:

nth_replace("Played a piano a a house", "a", "in", 1) # gives "Played a piano in a house" 
4

C'est en fait un peu difficile. Utilisez d'abord str.find pour obtenir un index au-delà de la première occurrence. Puis découpez et appliquez le remplacement (avec le compte 1, de manière à ne remplacer qu'une occurrence).

>>> x = 'na' 
>>> y = 'banana' 
>>> pos = y.find(x) + 1 
>>> y[:pos] + y[pos:].replace(x, 'other', 1) 
'banaother' 
1

Vous pouvez essayer ceci:

import itertools 
line = "hello, hi hello how are you hello" 
x = "hello" 
y = "something" 
new_data = line.split(x) 
new_data = ''.join(itertools.chain.from_iterable([(x, a) if i != 2 else (y, a) for i, a in enumerate(new_data)]))