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

1

Я хочу импортировать диапазон на основе наличия тегов в столбце "" 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

  • 2
    Вопросы по SO предназначены не только для того, чтобы получить быстрый ответ, но они также должны помочь другим, которые застряли на одном и том же вопросе. Не могли бы вы отредактировать его так, чтобы оно было автономным?
  • 0
    Я отредактирую свой пост, когда будет найдено решение с решением вместо ссылки. Это нормально?
Показать ещё 5 комментариев
Теги:
google-sheets

1 ответ

2
Лучший ответ

Просто используйте пользовательскую формулу. Таким образом, вы можете использовать версию JavaScript 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 на основе вашего Regex. Затем вы можете ввести регулярное выражение

((?=.*tag-1)(?=((.*tag-5)|(.*tag-2))) // tag-1 and (tag-5 or tag-2) in case insensitive
  • 1
    Это сработало отлично! Спасибо мистер Смит!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню