如何通过正则表达式匹配和将GMail地址列入黑名单

时间:2019-05-21 08:26:45

标签: regex pcre

我想匹配并阻止地址,例如foo.bar@gmail.com。但这不是那么容易,因为有以下任何一种情况:

foobar@gmail.com
fo.o....b..a..r@gmail.com
foo.bar+goo@gmail.com
fo.ob.ar+something@gmail.com

是同一电子邮件帐户的别名。是否可以创建与所有可能的别名匹配的regexp?还是我必须在应用过滤器/黑名单之前规范化(删除+之后的点和文本)所有gmail地址?

我可以选择:f[.]*o[.]*o[.]*b[.]*a[.]*r[.]*(+.*),但是对于较长的电子邮件来说却很可笑,并且性能可能很差

1 个答案:

答案 0 :(得分:2)

一种可能是正则表达式,例如

f\.*o\.*o\.*b\.*a\.*r(?=.*\@gmail\.com) 

此模式基本上表示在foobar的任何字母之后,点.的数量可能是未知的。您现在就可以始终从此处开始工作,并将表达式扩展为类似这样的内容

f[\.-_]*o[\.-_]*o[\.-_]*b[\.-_]*a[\.-_]*r(?=.*\@gmail\.com)

在这里,我们还接受未知数量的连字符和下划线。

示例

以下是python中的示例:

# import regex

string = 'fo.o....b..a..r@gmail.com'
pattern = r'f\.*o\.*o\.*b\.*a\.*r(?=.*\@gmail\.com)'
test = regex.search(pattern, strings[0])
print(test.group(0))
# foobar