def parse(self, query_text: str) -> SearchQuery: query = SearchQuery() for chunk in re.split(r"\s+", (query_text or "").lower()): if not chunk: continue negated = False if chunk[0] == "-": chunk = chunk[1:] negated = True if not chunk: raise errors.SearchError("Empty negated token.") match = re.match(r"^(.*?)(?<!\\):(.*)$", chunk) if match: key, value = list(match.groups()) key = util.unescape(key) if key == "sort": query.sort_tokens.append(_parse_sort(value, negated)) elif key == "special": query.special_tokens.append(_parse_special(value, negated)) else: query.named_tokens.append(_parse_named( key, value, negated)) else: query.anonymous_tokens.append(_parse_anonymous(chunk, negated)) return query
def parse(self, query_text: str) -> SearchQuery: query = SearchQuery() for chunk in re.split(r'\s+', (query_text or '').lower()): if not chunk: continue negated = False if chunk[0] == '-': chunk = chunk[1:] negated = True if not chunk: raise errors.SearchError('비어있는 부정 토큰.') match = re.match(r'^(.*?)(?<!\\):(.*)$', chunk) if match: key, value = list(match.groups()) key = util.unescape(key) if key == 'sort': query.sort_tokens.append(_parse_sort(value, negated)) elif key == 'special': query.special_tokens.append(_parse_special(value, negated)) else: query.named_tokens.append(_parse_named( key, value, negated)) else: query.anonymous_tokens.append(_parse_anonymous(chunk, negated)) return query
def parse(self, query_text: str) -> SearchQuery: query = SearchQuery() for chunk in re.split(r'\s+', (query_text or '').lower()): if not chunk: continue negated = False while chunk[0] == '-': chunk = chunk[1:] negated = not negated match = re.match('([a-z_-]+):(.*)', chunk) if match: key, value = list(match.groups()) if key == 'sort': query.sort_tokens.append(_parse_sort(value, negated)) elif key == 'special': query.special_tokens.append(_parse_special(value, negated)) else: query.named_tokens.append(_parse_named( key, value, negated)) else: query.anonymous_tokens.append(_parse_anonymous(chunk, negated)) return query