Фильтровать на основе строки, включая аргументы AND и OR, используя формулу регулярных выражений на листах Google - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу импортировать диапазон, основываясь на наличии тегов в столбце "" TAG "" листа 1.

Я хотел бы использовать REGEX в качестве условного оператора (например, "" tag-1 "" или "" tag-2 "" и "" tag-5 "") для проверки, является ли один из тегов присутствует в столбце, затем отфильтруйте соответствующую строку.

Я пробовал все SEARCH FILTER AND ... с любым успехом.

=FILTER(dataRange, REGEXMATCH(TagRange, "Tag1"), REGEXMATCH(TagRange, "Tag2"))

возвращает обе строки с Tag1 и Tag2, когда я хочу, чтобы он вел себя как оператор AND.

=FILTER(dataRange, AND(REGEXMATCH(TagRange, "Tag1"), REGEXMATCH(TagRange, "Tag2")))

для этого выглядит так: AND() формула возвращает только одно значение вместо нескольких TRUE / FALSE значений. Итак, я получаю сообщение об ошибке.

Google использует RE2 , поэтому выражение ?= не работает

вот таблица Google

1 Ответ

0 голосов
/ 15 сентября 2018

Просто используйте пользовательскую формулу .Таким образом, вы можете использовать REGEX-версию Javascript и использовать выражение ?=.

Вот формула:

function myCustom(dataRange, rgxA) {
  rgxA = new RegExp(rgxA, "gi");
  for (var i = 0; i < dataRange.length; i++)
    dataRange[i][0] = "" + (!(dataRange[i][0].match(rgxA) == null));
  return (dataRange);
}

Таким образом, вы вернете true или falseна основе вашего регулярного выражения.Затем вы можете ввести регулярное выражение, как

((?=.*tag-1)(?=((.*tag-5)|(.*tag-2))) // tag-1 and (tag-5 or tag-2) in case insensitive
...