正则表达式从电子邮件地址中的用户名中删除可变数量的句点?

时间:2014-12-28 07:27:54

标签: regex replace mariadb

我在论坛中清理了垃圾邮件帐户,发现了一堆电子邮件地址,格式如下:

n.fl.jersey.s@gmail.com
nfl.jerseys@gmail.com
n.flj.er.se.ys@gmail.com

Gmail将这些视为同一个电子邮件帐户,而论坛软件将其视为不同的电子邮件地址,因此垃圾邮件发送者在创建垃圾论坛帐户时会使用此技巧一次又一次地重复使用相同的电子邮件地址。

为了识别它们,我需要删除@gmail.com之前的所有时段。然后,很容易识别所有重复的帐户。

幸运的是,MariaDB 10有一个新的REGEXP_REPLACE功能,专门针对这些类型的问题而设计。不幸的是,我无法弄清楚正确的正则表达式。

我的主要障碍是周期数变化很大,而且当项目数量在整个字符串中随机变化时,我不确定如何编写正则表达式。我在其中一个电子邮件地址中找到了多达8个句点,完全随机地显示在字符串中。

如果我可以删除所有时段,这很容易,但我不能,因为我需要@gmail.com保持不变。此外,此正则表达式应仅匹配@ gmail.com地址,并忽略其他电子邮件提供商。

我该怎么做?

2 个答案:

答案 0 :(得分:7)

gmail地址还有另外一个技巧:忽略+个字符后的任何文字,例如foo@gmail.comfoo+bar@gmail.com实际上是相同的地址。

您可以使用此模式删除+字符后的所有文字,以及所有点(无耻地基于Raj的模式,请不要讨厌我):

(?:\.|\+.*)(?=.*?@gmail\.com)

(替换为空字符串)

regex101 demo.

答案 1 :(得分:6)

使用positive lookahead assertion匹配之前存在的所有点@gmail.com

\.(?=.*?@gmail\.com)

然后用空字符串替换匹配的点。

DEMO