RegexMatch возвращает значение "False", но строка Regex выглядит правильно
Я пытаюсь сопоставить обычные домены электронной почты - но не домены компании - в списке электронной почты, и я пытаюсь использовать RegexMatch в Google Sheets (regexmatch является частью более крупной формулы IF, но эта часть специально не ' т работает).
Очевидно, что я делаю что-то не так, но в различных инструментах тестирования Regex регулярное выражение работает как задумано.
Однако, когда выражение является частью формулы Google Sheets, оно возвращает "Ложь", когда оно должно совпадать с адресом электронной почты в соседней ячейке.
Что я здесь не так делаю?
=REGEXMATCH("INDIRECT(ADDRESS( ROW(),COLUMN()-1))","(\@aol\.com)|(\@live\.com)|(\@bellsouth\.net)|(\@btinternet\.com)|(\@ntlworld\.com)|(\@virgin\.net)|(\@ymail)|(\@att\.net)|(\@hotmail\.com)|(\@sbcglobal\.net)|(\@charter\.net)|(\@virginmedia\.com)|(\@o2\.co\.uk)|(\@wanadoo\.co\.uk)|(\@rambler\.ru)|(\@comcast\.net)|(\@hotmail\.co\.uk)|(\@verizon\.net)|(\@comcast\.net)|(\@blueyonder\.co\.uk)|(\@orange\.net)|(\@bt\.com)|(\@yandex\.ru)|(\@facebook\.com)|(\@mac\.com)|(\@yahoo\.com)|(\@cox\.net)|(\@freeserve\.co\.uk)|(\@sky\.com)|(\@ya\.ru)|(\@sbcglobal\.net)|(\@gmail\.com)|(\@me\.com)|(\@yahoo\.co\.uk)|(\@earthlink\.net)|(\@live\.co\.uk)|(\@talktalk\.co\.uk)|(\@list\.ru)|(\@optonline\.net)|(\@outlook\.com)|(\@juno\.com)|(\@tiscali\.co\.uk)|(\@icloud\.com)|(\@bell\.net)|(\@gmx\.com)|(\@mail\.com)|(\@googlemail\.com)|(\@msn\.com)")
1 ответ
Две вещи:
1) чтобы использовать косвенный, вам нужно будет удалить кавычки вокруг него, иначе он будет восприниматься как буквальная строка,
2) просто примечание, необязательно иметь группу захвата вокруг каждого варианта, |
уже рассматривает значения как потенциальные совпадения.
Если у вас длинный список потенциальных писем, то я обычно делаю их где-нибудь, давайте притворимся в столбце А, а затем используем JOIN
и |
в качестве разделителя соединений для ссылки на этот список для вашего регулярного выражения.
Если вы не планируете добавлять значения в список, это должно работать:
=REGEXMATCH(INDIRECT(ADDRESS( ROW(),COLUMN()-1)),join("|",$A$1:$A$48))
Однако, если вам действительно нужна длина динамического списка, на которой вы можете постоянно строить, вы можете изменить его еще раз, чтобы урезать диапазон только до длины доступных значений:
=REGEXMATCH(INDIRECT(ADDRESS( ROW(),COLUMN()-1)),join("|",INDIRECT("A1:A"&COUNTA(A:A))))