2013-04-05 160 views
0

我試圖解析和驗證語言。我想標記輸入以檢查語法。 我的輸入字符串是:Python3 re.split()通過不是特殊子字符串的字符

something > 0 AND (something CONTAINS "substr" OR NOT something) 

,如果我這樣做:

tokens = re.split(r"([\s()])", input) 

我得到這個:

['something', ' ', '>', ' ', '0', ' ', 'AND', ' ', '', '(', 'something', ' ', 'CONTAINS',' ', '"substr"', ' ', 'OR', ' ', 'NOT', ' ', 'something', ')', ''] 

這是exacly我想要什麼。但是,總有一些「東西」。如果我更換「SUBSTR」「SUBSTR與空白」,我得到這個數組,這是不完美的結果:

['"substr', ' ', 'with', ' ', 'whitespace"'] 

有什麼辦法如何分割到下面?

['"substr with whitespace"'] 

或者如何有效地修復這個「如此接近的分裂」? 或者也可以是不同的,我錯過了...

回答

0

試想用

re.split(r"\s*(NOT|AND|OR|\(|\)|CONTAINS|<|>|=)\s*", input) 

的分裂解決我的問題