검색 쿼리를 구문 분석하기 위해 문법 작업을하고 있습니다 (평가하지 않고 구성 요소로 분해). 지금은 nestedExpr
으로 일하고 있는데, 각 용어의 각기 다른 '레벨'을 얻으려고합니다.하지만 용어의 첫 번째 부분이 큰 따옴표 안에 있으면 문제가있는 것 같습니다.Parsarsing : 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)
수익을 호출 두 번째 dblQuotedString
인스턴스에 발생하며, 인용 된 비트가 dblQuotedString
이 아닌 QUOTED
인스턴스 (중괄호 포함) 인 경우에도 발생하지 않습니다.
dblQuotedString
에 대한 특별한가요?
참고 : operatorPrecedence
은 이와 같은 검색어를 해독 할 수 있지만 몇 가지 문제가있을 수 있습니다. 따라서 제한 범위 내에서 nestedExpr
을 사용할 수 있는지 테스트하고 있습니다.
아에
당신은 찾을 수 있습니다 자세한 내용과 예제를, 나는, 참조 그건 의미가 있습니다. 정말 고마워! – allonsyechoes