2013-04-28 12 views
7

Wie soll man Terme in einer Zeichenkette ersetzen - mit Ausnahme der letzten, die zu etwas anderem ersetzt werden muss?Python: Ersetze Terme in einer Zeichenkette mit Ausnahme der letzten

Ein Beispiel:

letters = 'a;b;c;d' 

geändert werden muss, um

letters = 'a, b, c & d' 

ich verwendet habe, die Funktion ersetzen, wie folgt:

letters = letters.replace(';',', ') 

geben

letters = 'a, b, c, d' 

Das Problem ist, dass ich nicht weiß, wie man das letzte Komma davon in ein kaufmännisches Und ersetzen kann. Eine positionsabhängige Funktion kann nicht verwendet werden, da eine beliebige Anzahl von Buchstaben vorhanden sein könnte, beispielsweise 'a; b' oder 'a; b; c; d; e; f; g'. Ich habe stackoverflow und die Python-Tutorials durchsucht, kann aber keine Funktion finden, die den letzten gefundenen Begriff ersetzt, kann jemand helfen?

+1

http://stackoverflow.com/questions/2556108/how-to-Replace-the-last-Vorkommen-eines-Ausdrucks-in-einer-Zeichenfolge –

Antwort

6

In str.replace Sie auch ein optionales drittes Argument (count), die die Anzahl der Ersatz getan zu handhaben verwendet wird, passieren kann.

In [20]: strs = 'a;b;c;d' 

In [21]: count = strs.count(";") - 1 

In [22]: strs = strs.replace(';', ', ', count).replace(';', ' & ') 

In [24]: strs 
Out[24]: 'a, b, c & d' 

Hilfe auf str.replace:

S.replace(old, new[, count]) -> string 

Return a copy of string S with all occurrences of substring 
old replaced by new. If the optional argument count is 
given, only the first count occurrences are replaced. 
+1

Haben Sie einen Versuch und es funktioniert perfekt, vielen Dank für Ihre Hilfe! – user2330075

3
In [1]: letters = 'a;b;c;d' 

In [2]: ' & '.join(letters.replace(';', ', ').rsplit(', ', 1)) 
Out[2]: 'a, b, c & d' 
1

Einen anderen Weg, um es in einer Zeile zu tun, ohne die Anzahl der Vorkommen zu wissen:

letters = 'a;b;c;d' 
letters[::-1].replace(';', ' & ', 1)[::-1].replace(';', ', ') 
Verwandte Themen