検索クエリを解析するための文法に取り組んでいます(評価していない、コンポーネントに分解する)。今、私はnestedExpr
と仕事しています。それぞれの用語のさまざまなレベルをつかむためですが、用語の最初の部分が二重引用符で囲まれていると問題があるようです。構文解析:nestedExprでdblQuotedStringの構文解析が異なります
文法の単純なバージョン:
[['dog* OR boy girl w/3', ['"girls n dolls"', 'OR friends OR "best friend" OR', ['friends w/10 enemies']]]]
最初dblQuotedString
インスタンスがない同じネスティングにおける用語の残りの部分から分離されている:
QUOTED = QuotedString(quoteChar = '“', endQuoteChar = '”', unquoteResults = False).setParseAction(remove_curlies)
WWORD = Word(alphas8bit + printables.replace("(", "").replace(")", ""))
WORDS = Combine(OneOrMore(dblQuotedString | QUOTED | WWORD), joinString = ' ', adjacent = False)
TERM = OneOrMore(WORDS)
NESTED = OneOrMore(nestedExpr(content = TERM))
query = '(dog* OR boy girl w/3 ("girls n dolls" OR friends OR "best friend" OR (friends w/10 enemies)))'
はNESTED.parseString(query)
リターンを呼び出します2番目のdblQuotedString
インスタンスに発生し、引用されたビットがdblQuotedString
ではなく、QUOTED
インスタンス(中括弧付き引用符)の場合は発生しません。
dblQuotedString
には何か特別なものがありますか?
注:operatorPrecedence
はこのような検索用語を分割することができますが、何が壊れているのかにはいくつかの制限がありますので、nestedExpr
を使用してこれらの制限内で作業することができます。
ああ、で、より多くの詳細と例を見つけることができます、それは理にかなっている。本当にありがとう! – allonsyechoes