如何避免使用regex选择具有特定域名的电子邮件ID

2024-09-24 22:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个电子邮件ID列表,其中我只能选择那些没有ruba.com作为带有regex的域名。例如,如果我有邮箱:ads@gmail.com, dgh@rubd.com和ert@ruba.com,则正则表达式应选择前两个ID。这个问题的正则表达式应该是什么?你知道吗

我试过两种表达方式:

[a-zA-Z0-9.+-]+@[^(ruba)]+.[a-zA-Z0-9-.]+[a-zA-Z0-9.+-]+@[^r][^u][^b][^a]+.[a-zA-Z0-9-.]+

以上两个都不能满足我的要求。你知道吗


Tags: comid列表电子邮件gmailregexads域名
2条回答

您可以使用负前瞻来确保与域不匹配ruba.com。你知道吗

消极的前瞻:(?!rubd)将匹配任何你想排除的东西。此外,由于电子邮件通常不止包含单词字符(如连字符和句点),因此最好使用[\w\.\-]而不仅仅是\w。你知道吗

^[\w\.\-]+@(?!rubd)[\w\.\-]+\.(?:com|net|org|edu)$

DEMO

我假设email ID是指@符号前面的部分,否则就是完整的电子邮件地址。你知道吗

.+(?=@)(?!@ruba\.com)
  • .点字符是正则表达式引擎的特殊符号 它被用来捕捉一切
  • *也称为Kleene plus表示要捕获前面符号的一个或多个实例,在我们的例子中是.;基本上是说“给我每个字符”
  • (?=@)是一个积极的前瞻性,即一个特殊的搜索功能,确保后面的内容是@;我使用它将光标移到@的位置并“停止”捕获,否则+将无限期地继续
  • (?!@ruba\.com)是一种消极的前瞻性,即一种特殊的搜索功能,它确保后面的内容不是(!@ruba\.com;我对点进行了转义,以避免将其与之前所说的“捕获所有”符号混淆

现场演示here。你知道吗

相关问题 更多 >