2015-05-16 20 views
6

Tôi đã thử một ví dụ đơn giản với phân tách chuỗi, nhưng nhận được một số hành vi không mong muốn. Đây là mã mẫu:Python - phân tách chuỗi với dấu phân tách mặc định so với dấu phân cách do người dùng xác định

def split_string(source,splitlist): 
    for delim in splitlist: 
     source = source.replace(delim, ' ') 
    return source.split(' ') 

out = split_string("This is a test-of the,string separation-code!", " ,!-") 
print out 
>>> ['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code', ''] 

Như bạn có thể thấy, tôi có thêm chuỗi trống ở cuối danh sách khi tôi sử dụng dấu cách làm đối số dấu phân cách cho hàm split(). Tuy nhiên, nếu tôi không vượt qua bất kỳ đối số nào cho hàm split(), tôi sẽ không có chuỗi rỗng ở cuối danh sách đầu ra.

Từ những gì tôi đọc trong tài liệu python, họ cho biết đối số mặc định cho split() là dấu cách. Vì vậy, tại sao khi tôi rõ ràng vượt qua trong một '' như delimiter, nó tạo ra một chuỗi rỗng ở phần cuối của danh sách đầu ra?

Trả lời

12

Các docs:

Nếu không được chỉ định hoặc không có, một thuật toán tách khác nhau là được áp dụng: khoảng trắng liên tiếp được coi là một dấu tách đơn và kết quả sẽ không chứa chuỗi trống khi bắt đầu hoặc kết thúc nếu chuỗi có khoảng trắng đầu hoặc cuối.

+0

wow, đó là vấn đề! – Bent

-2

Điều đó có thể xảy ra nếu bạn có nhiều khoảng trắng tách hai từ. Ví dụ:

'a b'.split(' ') will return ['a', '', '', '', 'b'] 

Nhưng tôi khuyên bạn nên sử dụng tách khỏi mô-đun. Kiểm tra ví dụ dưới đây:

import re 
print re.split('[\s,; !]+', 'a b !!!!!!! ,  hello ;;;;; world') 

Khi chúng tôi chạy mảnh ở trên, nó ra [ 'a', 'b', 'hello', 'thế giới']

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