2013-04-28 30 views
7

cuối cùng Làm cách nào để thay thế các cụm từ trong chuỗi - ngoại trừ cái cuối cùng, cái nào cần được thay thế cho một cái gì đó khác?Python: thay thế các cụm từ trong một chuỗi ngoại trừ

Một ví dụ:

letters = 'a;b;c;d' 

cần phải được thay đổi để

letters = 'a, b, c & d' 

Tôi đã sử dụng các chức năng, như sau thay thế:

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

để cung cấp cho

letters = 'a, b, c, d' 

Vấn đề là tôi không biết cách thay thế dấu phẩy cuối cùng từ này thành dấu và. Không thể sử dụng chức năng phụ thuộc vị trí vì có thể có bất kỳ số lượng chữ cái nào, ví dụ: a; b 'hoặc' a; b; c; d; e; f; g '. Tôi đã tìm kiếm thông qua stackoverflow và hướng dẫn python, nhưng không thể tìm thấy một chức năng để chỉ thay thế các thuật ngữ tìm thấy cuối cùng, bất cứ ai có thể giúp đỡ?

+1

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

Trả lời

6

Trong str.replace bạn cũng có thể chuyển đối số thứ 3 tùy chọn (count) được sử dụng để xử lý số thay thế đang được thực hiện.

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' 

Trợ giúp về 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

Hãy thử cách này và nó hoạt động hoàn hảo, cảm ơn sự giúp đỡ của bạn! – user2330075

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

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

Một cách khác để làm việc đó trong một dòng mà không biết số lần xuất hiện:

letters = 'a;b;c;d' 
letters[::-1].replace(';', ' & ', 1)[::-1].replace(';', ', ') 
Các vấn đề liên quan