Python 3.x Python3 re.split()通过不在特殊子字符串中的字符

Python 3.x Python3 re.split()通过不在特殊子字符串中的字符,python-3.x,tokenize,Python 3.x,Tokenize,我正在尝试解析和验证语言。我想标记输入以检查语法。 我的输入字符串是: something > 0 AND (something CONTAINS "substr" OR NOT something) 如果我这样做: tokens = re.split(r"([\s()])", input) 我明白了: ['something', ' ', '>', ' ', '0', ' ', 'AND', ' ', '', '(', 'something', ' ', 'CONTAINS',

我正在尝试解析和验证语言。我想标记输入以检查语法。 我的输入字符串是:

something > 0 AND (something CONTAINS "substr" OR NOT something)
如果我这样做:

tokens = re.split(r"([\s()])", input)
我明白了:

['something', ' ', '>', ' ', '0', ' ', 'AND', ' ', '', '(', 'something', ' ', 'CONTAINS','   ', '"substr"', ' ', 'OR', ' ', 'NOT', ' ', 'something', ')', '']
这正是我想要的。但是,总有一些“东西”。如果我将“substr”替换为“substr with whitespace”,我得到了这个数组,这不是完美的结果:

['"substr', ' ', 'with', ' ', 'whitespace"']
有没有办法拆分成以下内容

['"substr with whitespace"']
或者如何有效地修复这种“如此紧密的分裂”?
或者是我错过了什么不同的东西…

想想和你分手吧

re.split(r"\s*(NOT|AND|OR|\(|\)|CONTAINS|<|>|=)\s*", input)
re.split(r“\s*(非|和|或|\(|\)|包含| |=)\s*”,输入)
解决了我的问题