2012-08-05 33 views
8

Tôi đang cố tạo regex để khớp với các ký tự dấu phẩy không thoát trong một chuỗi.Ký tự đối sánh regex không được thoát

Quy tắc tôi đang tìm kiếm là "Dấu phẩy không có trước một số dấu gạch chéo ngược".

trường hợp thử nghiệm:

True abc,abc 
False abc\,abc 
True abc\\,abc 
False abc\\\,abc 
True abc\\\\,abc 
False abc\\\\\,abc 

tôi cố gắng sử dụng một tiêu cực nhìn đằng sau: (?<!(\\+)), nhưng Python mang lại cho tôi error: look-behind requires fixed-width pattern.

+0

hãy thử sử dụng chuỗi thô «r ... '' tuyên bố regex – JBernardo

+0

Tại sao là ví dụ đầu tiên đúng không? Nó không được thoát. Bạn không thể đếm số lượng dấu gạch chéo và xác định xem đó có phải là số chẵn không? – Ben

+0

@JBernardo Tôi đang sử dụng các chuỗi thô. Tôi đang tìm kiếm các ký tự không được thoát, được cập nhật tiêu đề để làm rõ. – bcoughlan

Trả lời

18

Hãy thử regex này: (?<!\\)(?:\\\\)*,

Giải thích:

(?<!\\) Matches if the preceding character is not a backslash 
(?:\\\\)* Matches any number of occurrences of two backslashes 
,   Matches a comma 
+0

Tính năng này hoạt động. Bất cứ nơi nào tôi có thể tìm thấy một lời giải thích về điều này? – bcoughlan

+2

Một vấn đề nhỏ là nhóm đối sánh chứa tất cả các dấu gạch chéo ngược trước. Bất kỳ cách giải quyết nào cho vấn đề này? – bcoughlan

+0

Tại sao lại là một vấn đề? Bạn đã biết rằng ký tự cuối cùng của trận đấu là dấu phẩy. – MRAB

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