2013-07-26 41 views
9

Làm cách nào để xóa mọi thứ sau một ký tự nhất định của chuỗi trong python? Ví dụ tôi có một chuỗi chứa đường dẫn tệp và một số ký tự thừa. Làm cách nào để xóa mọi thứ sau tệp .zip? Tôi đã thử rsplitsplit nhưng không bao gồm tệp .zip khi xóa các ký tự thừa.Làm cách nào để xóa mọi thứ sau một ký tự nhất định trong chuỗi?

Mọi đề xuất?

+0

thể trùng lặp của (http://stackoverflow.com/questions/904746/how -to-remove-all-characters-after-a-specific-character-in-python) –

Trả lời

13

Chỉ cần lấy phần đầu tiên của sự chia rẽ, và thêm '.zip' lại:

s = 'test.zip.zyz' 
s = s.split('.zip', 1)[0] + '.zip' 

Hoặc bạn có thể sử dụng cắt, đây là giải pháp mà bạn không cần thêm '.zip' trở lại kết quả (các 4 đến từ len('.zip')):

s = s[:s.index('.zip')+4] 

Hoặc khác thay thế với biểu thức thông thường:

import re 
s = re.match(r'^.*?\.zip', s).group(0) 
4

Dùng lát:

s = 'test.zip.xyz' 
s[:s.index('.zip') + len('.zip')] 
=> 'test.zip' 

Và thật dễ dàng để đóng gói ở trên trong một hàm helper nhỏ:

def removeAfter(string, suffix): 
    return string[:string.index(suffix) + len(suffix)] 

removeAfter('test.zip.xyz', '.zip') 
=> 'test.zip' 
1

Bạn có thể sử dụng re mô-đun:

import re 
re.sub('\.zip.*','.zip','test.zip.blah') 
11

str.partition :

>>> s='abc.zip.blech' 
>>> ''.join(s.partition('.zip')[0:2]) 
'abc.zip' 
>>> s='abc.zip' 
>>> ''.join(s.partition('.zip')[0:2]) 
'abc.zip' 
>>> s='abc.py' 
>>> ''.join(s.partition('.zip')[0:2]) 
'abc.py' 
1

Tôi nghĩ rằng thật dễ dàng để tạo ra một hàm lambda đơn giản cho việc này.

mystrip = lambda s, ss: s[:s.index(ss) + len(ss)] 

có thể được sử dụng như thế này: [? Làm thế nào để loại bỏ tất cả các ký tự sau một nhân vật cụ thể trong python]

mystr = "this should stay.zipand this should be removed." 
mystrip(mystr, ".zip") # 'this should stay.zip' 
+0

Đây không phải là câu trả lời đơn giản của Óscar López sao? Tôi cũng không chắc chắn tôi thấy điểm của việc sử dụng một 'lambda' nếu bạn sẽ ngay lập tức cho nó một cái tên. – DSM

+0

Bạn nói đúng nhưng câu trả lời xuất hiện nhanh chóng và tôi đã không làm mới trang trước khi đăng .. F.J cũng có câu trả lời tương tự. – joente

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