言語を解析して検証しようとしています。入力をトークン化して文法をチェックしたい。私の入力文字列は次のとおりです。
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"']
または、この「非常に近い分割」を効率的に修復する方法は? それとも、私が見逃した別の何か...