2013-04-06 35 views
43

Tôi đang cố gắng in phần cuối của chuỗi trước một ký tự nhất định.cách lấy phần cuối của chuỗi trước một ký tự nhất định?

Tôi không hoàn toàn chắc chắn có nên sử dụng chuỗi .split() hoặc cắt chuỗi hoặc có thể một cái gì đó khác.

Dưới đây là một số mã mà không làm việc nhưng tôi nghĩ rằng cho thấy logic:

x = 'http://test.com/lalala-134' 
print x['-':0] # beginning at the end of the string, return everything before '-' 

Lưu ý rằng số ở cuối sẽ khác nhau về kích thước vì vậy tôi không thể thiết lập một số chính xác từ cuối cùng của chuỗi.

Trả lời

81

Bạn đang tìm kiếm str.rsplit(), với giới hạn:

print x.rsplit('-', 1)[0] 

.rsplit() tìm kiếm cho chuỗi tách từ ngày kết thúc chuỗi đầu vào, và các giới hạn đối số thứ hai bao nhiêu lần nó sẽ tách ra để chỉ một lần.

Một lựa chọn khác là sử dụng str.rpartition(), mà chỉ bao giờ sẽ chia chỉ một lần:

print x.rpartition('-')[0] 

Đối với tách chỉ một lần, str.rpartition() là phương pháp nhanh hơn cũng; nếu bạn cần chia nhỏ nhiều lần, bạn chỉ có thể sử dụng str.rsplit().

Demo:

>>> x = 'http://test.com/lalala-134' 
>>> print x.rsplit('-', 1)[0] 
http://test.com/lalala 
>>> 'something-with-a-lot-of-dashes'.rsplit('-', 1)[0] 
'something-with-a-lot-of' 

và cùng với str.rpartition()

>>> print x.rpartition('-')[0] 
http://test.com/lalala 
>>> 'something-with-a-lot-of-dashes'.rpartition('-')[0] 
'something-with-a-lot-of' 
+0

cảm ơn bạn rất nhiều, tôi đã từng 'x.rsplit in ('-', 1) [1] 'và nó làm việc, cảm ơn bạn . tôi cũng đã đi qua 'in x.rpartition ('-') [2]' và điều đó dường như làm việc quá! cảm ơn một lần nữa! – user1063287

+2

Phải, từ ngữ của bạn hơi mơ hồ; bạn đã yêu cầu * phần cuối của chuỗi ** trước ** một ký tự *; bạn có nghĩa là sau, tôi đoán vậy. :-) –

+0

nhưng ý kiến ​​tuyệt vời của tôi! 'bắt đầu ở cuối chuỗi', tôi hiểu ý của bạn là haha. – user1063287

0

Sự khác nhau giữa chiaphân vùng được chia trả về danh sách mà không delimiter và sẽ chia có bao giờ nó được delimiter trong chuỗi tức là

x = ' http://test.com/lalala-134-431 '

a,b,c = x.split(-) print(a) " http://test.com/lalala " print(b) "134" print(c) "431"

phân vùng sẽ chia chuỗi với chỉ delimiter đầu tiên và sẽ chỉ trả lại 3 giá trị trong danh sách

x = ' http://test.com/lalala-134-431 ' a,b,c = x.partition('-') print(a) " http://test.com/lalala " print(b) "-" print(c) "134-431"

vì vậy khi bạn muốn giá trị cuối cùng bạn có thể sử dụng rpartition nó hoạt động trong cùng một cách nhưng nó sẽ tìm thấy dấu phân cách từ cuối chuỗi

x = ' http://test.com/lalala-134-431 ' a,b,c = x.partition('-') print(a) " http://test.com/lalala-134 " print(b) "-" print(c) "431"

Các vấn đề liên quan