2013-04-28 14 views
7

Come si fa a sostituire i termini in una stringa, ad eccezione dell'ultima, che deve essere sostituita con qualcosa di diverso?Python: sostituire i termini in una stringa tranne l'ultimo

Un esempio:

letters = 'a;b;c;d' 

deve essere cambiato per

letters = 'a, b, c & d' 

Ho usato la funzione, come sotto sostituire:

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

invia

letters = 'a, b, c, d' 

Il problema è che non so come sostituire l'ultima virgola da questo in una e commerciale. Una funzione dipendente dalla posizione non può essere utilizzata in quanto potrebbe esserci un numero qualsiasi di lettere ad esempio 'a; b' o 'a; b; c; d; e; f; g'. Ho cercato attraverso StackOverflow e le esercitazioni Python, ma non riesco a trovare una funzione per sostituire solo l'ultimo termine trovato, qualcuno può aiutare?

+1

http://stackoverflow.com/questions/2556108/how-to-replace-the-last-occurrence-of-an-expression-in-a-string –

risposta

6

In str.replace si può anche passare un terzo argomento facoltativo (count) che viene utilizzato per gestire il numero di sostituzioni stato fatto.

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' 

Guida in 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

Questa è una prova e funziona perfettamente, grazie per il vostro aiuto! – user2330075

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

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

Un altro modo di farlo in una sola riga senza conoscere il numero di occorrenze:

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