Tách trên dấu phân cách cuối cùng trong chuỗi Python?


204

Thành ngữ Python được đề xuất để phân tách một chuỗi trong lần xuất hiện cuối cùng của dấu phân cách trong chuỗi là gì? thí dụ:

# instead of regular split
>> s = "a,b,c,d"
>> s.split(",")
>> ['a', 'b', 'c', 'd']

# ..split only on last occurrence of ',' in string:
>>> s.mysplit(s, -1)
>>> ['a,b,c', 'd']

mysplitlấy một đối số thứ hai là sự xuất hiện của dấu phân cách được phân tách. Giống như trong lập chỉ mục danh sách thông thường, -1có nghĩa là cuối cùng từ cuối. Điều này có thể giải quyết như thế nào?

Câu trả lời:


356

Sử dụng .rsplit() hoặc .rpartition()thay thế:

s.rsplit(',', 1)
s.rpartition(',')

str.rsplit()cho phép bạn chỉ định số lần tách, trong khi str.rpartition()chỉ phân tách một lần nhưng luôn trả về một số phần tử cố định (tiền tố, dấu phân cách & hậu tố) và nhanh hơn cho trường hợp phân tách đơn.

Bản giới thiệu:

>>> s = "a,b,c,d"
>>> s.rsplit(',', 1)
['a,b,c', 'd']
>>> s.rsplit(',', 2)
['a,b', 'c', 'd']
>>> s.rpartition(',')
('a,b,c', ',', 'd')

Cả hai phương thức bắt đầu phân tách từ phía bên phải của chuỗi; bằng cách đưa ra str.rsplit()tối đa là đối số thứ hai, bạn có thể phân chia chỉ các lần xuất hiện bên tay phải.


19

Bạn có thể sử dụng rsplit

string.rsplit('delimeter',1)[1]

Để có được chuỗi từ đảo ngược.


5

Tôi chỉ làm điều này cho vui

    >>> s = 'a,b,c,d'
    >>> [item[::-1] for item in s[::-1].split(',', 1)][::-1]
    ['a,b,c', 'd']

Thận trọng : Tham khảo bình luận đầu tiên ở bên dưới nơi câu trả lời này có thể sai.


2
'chỉ để cho vui' nhưng cũng rất sai, bởi vì nếu dấu phân cách không chỉ là một ký tự đơn hoặc một ký tự lặp lại, thì phần tách của bạn sẽ chọn, tốt nhất là, các điểm sai sẽ bị tách ra.
Martijn Pieters
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.