2009-03-06 38 views
7

Tôi muốn cắt một chuỗi các địa chỉ email có thể được phân cách bằng bất kỳ kết hợp dấu phẩy và khoảng trắng nào.Python regex chia chuỗi bằng một trong hai dấu phân tách

Và tôi nghĩ rằng nó sẽ là khá thẳng về phía trước:

sep = re.compile('(\s*,*)+') 
print sep.split("""[email protected], [email protected] 

    [email protected],,[email protected]""") 

Nhưng nó không phải là. Tôi không thể tìm thấy một regex sẽ không để lại một số vị trí trống như thế này:

['[email protected]', '', '[email protected]', '', '[email protected]', '', '[email protected]'] 

Tôi đã thử các kết hợp khác nhau, nhưng dường như không có cách nào hoạt động. Điều này, trên thực tế, có thể, với regex?

+1

Đây không phải là một bài wiki cộng đồng. – Triptych

+1

Nó thực sự không phải là một bài đăng trên cộng đồng wiki. Nhưng vẫn còn, vấn đề này được giải quyết độc đáo bằng cách sử dụng regexes. Sử dụng regex hợp lệ! +1 – batbrat

+0

tôi nghĩ vì anh ta tự trả lời – hasen

Trả lời

14

Doh!

Chỉ là điều này.

sep = re.compile('[\s,]+') 
+0

Trong Perl (có lẽ bằng Python, do thực tế nó dường như đang làm điều tương tự) bằng cách sử dụng() s trong một regex khi chia tách gây ra sự phân chia() để bảo toàn (giữa các parens) và trả về một danh sách có khớp mẫu ở giữa các mục bạn muốn. Vì vậy, có thể không sử dụng() s trong một phân chia. –

2

Tôi thích sau ...

>>> sep= re.compile(r',*\s*') 
>>> sep.split("""[email protected], [email protected] 

    [email protected],,[email protected]""") 
['[email protected]', '[email protected]', '[email protected]', '[email protected]'] 

nào cũng dường như làm việc trên dữ liệu thử nghiệm của bạn.

+0

+1: Tôi không biết tại sao điều này lại bị bỏ phiếu trước đây, nhưng nó hoạt động khá độc đáo. – tgray

+0

Regex đó sẽ khớp với chuỗi rỗng, vì nó sử dụng định lượng sao cho mọi thứ. Thực sự bạn muốn chia nhỏ ít nhất một ký tự; giải pháp của OP với một lớp nhân vật và cộng với định lượng là tốt hơn, chưa kể rõ ràng hơn nhiều để đọc. – kquinn

+0

Tôi hiểu. Tôi không nghĩ rằng các biểu thức chính quy có thể được xếp hạng trên khả năng đọc, nhưng tôi nhận được quan điểm của bạn về việc khớp ít nhất một ký tự. – tgray

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