QUERY RegEx и & - PullRequest
       12

QUERY RegEx и &

0 голосов
/ 04 декабря 2018

У меня есть длинные листы Google QUERY, часть которых такова:

=QUERY(LOOKUP!$A$4:$H,"Select count(B) where UPPER(D) matches 'OK' and UPPER(H) matches '.*(?:^|,|,\s)"&REGEXEXTRACT(REGEXREPLACE($Q3,"\s|-","")," \w+ ")&"(?:,\s|,|$).*' and (UPPER(C) contains '"&REGEXEXTRACT($Q3, "\{(\w+)\}")&"' or UPPER(F) contains '"&REGEXEXTRACT($Q3, "\{(\w+)\}")&"') limit 1 label count(B) ''",0)

В основном, если у меня есть запись типа apple {pear}, я хочу, чтобы только яблочный бит соответствовал как часть запроса.Это работает абсолютно нормально, за исключением случаев, когда я добавляю бит &, например.apple&banana {pear} совпадение не удается, даже если apple&pear определенно присутствует в поиске, поэтому я думаю, что проблема с моим RegEx.Я попытался просто заменить селектор \w+ в отдельном месте в RegEx на .* выше, но не повезло.

Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 05 декабря 2018

Имеет смысл заменить \w+ на \w+(?:&\w+)*.

Шаблон \w+(?:&\w+)* соответствует

  • \w+ - 1 или более слов, букв, букв, цифры или _
  • (?:&\w+)* - соответствует 0 или более вхождениям:
    • & - & char
    • \w+ - 1 илидругие слова, буквы, цифры или _

Если вы не хотите совпадать с _, используйте

[A-Za-z0-9]+(?:&[A-Za-z0-9]+)*

Обратите внимание, что [A-Za-z0-9&]+ также можно использовать, если вам все равно, есть ли на входе символы & (и хотите соответствовать).

...