2017-09-22 4 views
2

Ich weiß, dass die folgende ist, wie eine Zeichenfolge mit einer anderen Zeichenfolgeersetzen bestimmte Instanz in string - Python

line.replace(x, y)

Aber ich mag ersetzen ich nur die zweite Instanz von x in der Zeile ersetzen. Wie machst du das? Danke

EDIT Ich dachte, ich wäre in der Lage, diese Frage zu stellen, ohne ins Detail zu gehen, aber leider funktionierte keine der Antworten in meiner Situation. Ich schreibe in eine Textdatei und verwende den folgenden Code, um die Datei zu ändern.

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

Aber wenn gewähltTeam mehrmals vorkommt, dann werden alle von ihnen ersetzt. Wie kann ich nur die n-te Instanz in dieser Situation ersetzen.

+0

Mögliches Duplikat von [Wie a ll Vorkommen einer Zeichenfolge in JavaScript?] (https://stackoverflow.com/questions/1144783/how-to-replace-all-occurrences-of-a-string-in-javascript) – Antimony

+0

Er meinte Python obwohl. – oreofeolurin

+1

Mögliches Duplikat von [Ersetze ntes Vorkommen von Teilzeichenfolge in Zeichenfolge] (https://stackoverflow.com/questions/35091557/replace-nth-occurrence-of-substring-in-string) – mentalita

Antwort

2

Bonus, ist dies ein Verfahren "NTH" Vorkommen in einer

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] 

Beispiel

Zeichenfolge zu ersetzen:

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

Das ist eigentlich ein wenig schwierig. Verwenden Sie zuerst str.find, um einen Index über das erste Auftreten zu erhalten. Schneiden Sie dann die Ersetzung ab und wenden Sie sie an (mit der Zahl 1, um nur ein Vorkommen zu ersetzen).

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

Sie können dies versuchen:

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)]))