0

言語を解析して検証しようとしています。入力をトークン化して文法をチェックしたい。私の入力文字列は次のとおりです。

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"']

または、この「非常に近い分割」を効率的に修復する方法は? それとも、私が見逃した別の何か...

4

1 に答える 1

0

との分割を考えてください

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

私の問題を解決しました

于 2013-04-05T10:59:32.627 に答える