我正在研究解析搜索查詢的語法(不評估它們,只是將它們分解爲組件)。現在我正在與nestedExpr
合作,只是爲了抓住每個術語的不同「水平」,但如果術語的第一部分是雙引號,我似乎有問題。Pyparsing:dblQuotedString在nestedExpr中的解析方式
語法的簡化版本:
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)
回報:
[['dog* OR boy girl w/3', ['"girls n dolls"', 'OR friends OR "best friend" OR', ['friends w/10 enemies']]]]
第一dblQuotedString
實例是從長期的在同一嵌套的休息,這不分開出現在第二個dblQuotedString
實例中,並且如果所引用的位是QUOTED
實例(帶有引號引號),而不是dblQuotedString
,那麼也不會發生這種情況。
dblQuotedString
我有遺漏嗎?
注:我知道operatorPrecedence
可以分解這樣的搜索字詞,但我對可以分解的內容有一些限制,所以我測試是否可以使用nestedExpr
在這些限制內工作。
啊,我明白了,這就說得通了。非常感謝! – allonsyechoes