-1

我正在尝试在电子邮件列表中匹配常见的电子邮件域(但不是公司域),并且我正在尝试在 Google 表格中使用 RegexMatch(regexmatch 是更大的 IF 公式的一部分,但这部分具体不是' t 工作)。

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

但是,当表达式是 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)")
4

1 回答 1

0

两件事情:

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

2)只是一个注释,并不是必须在每个变体周围都有一个捕获组,|它已经将这些值视为潜在的匹配项。

如果您有很长的潜在电子邮件列表,我通常会在某处将它们全部列出,让我们假装在 A 列中,然后使用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))))

在此处输入图像描述

于 2016-06-04T08:52:14.913 回答