RegexMatch返回'False',但正则表达式字符串看起来正确

时间:2016-06-03 20:32:17

标签: regex google-sheets re2

我正在尝试在电子邮件列表中匹配常见的电子邮件域 - 但不是公司域名 - 我正在尝试在Google表格中使用RegexMatch(正则表达式是更大的IF公式的一部分,但此部分特别是不工作)。

显然,我做错了,但在各种Regex测试工具中,正则表达式按预期工作。

但是,当表达式是Google表格公式的一部分时,如果它应匹配相邻单元格中的电子邮件,则会返回“False”。

我在这里做错了什么?

=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 个答案:

答案 0 :(得分:0)

两件事:

1)使用间接,你需要删除它周围的引号,否则它被视为文字字符串,

2)只是注意,并非强制要求在每个变体周围都有一个捕获组,|已经将值视为潜在匹配。

如果您有很长的潜在电子邮件列表,我通常会将它们列在某处,让我们假装在A列中,然后使用JOIN|作为连接分隔符来引用你的regexmatch列表。

如果您不打算在列表中添加值,那么这应该有效:

=REGEXMATCH(INDIRECT(ADDRESS( ROW(),COLUMN()-1)),join("|",$A$1:$A$48))

但是,如果您确实想要一个可以不断构建的动态列表长度,则可以再次修改以将范围仅调整为可用值的长度:

=REGEXMATCH(INDIRECT(ADDRESS( ROW(),COLUMN()-1)),join("|",INDIRECT("A1:A"&COUNTA(A:A))))

enter image description here