如何避免使用正则表达式选择具有特定域名的电子邮件ID

时间:2018-03-17 21:42:17

标签: python regex

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

我试过两个表达式:

[A-ZA-Z0-9 _ + - 。] + @ [^(鲁巴)] + [A-ZA-Z0-9 - ]。+ 和 的 [A-ZA-Z0-9 _ + - 。] + @ [^ R] [^ü] [^ B] [^ A] + [A-ZA-Z0-9 - ]。+

以上两者都不能满足我的要求。

2 个答案:

答案 0 :(得分:0)

您可以使用否定前瞻来确保您与域 ruba.com 不匹配。

否定前瞻:(?!rubd)会将匹配您要排除的任何内容。此外,由于电子邮件通常包含多个单词字符(例如连字符和句点),因此最好使用[\w\.\-]而不仅仅是\w

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

DEMO

答案 1 :(得分:0)

我认为通过电子邮件ID,您指的是@符号前面的部分,否则这将是一个完整的电子邮件地址。

.+(?=@)(?!@ruba\.com)
  • .点字符是正则表达式引擎的特殊符号 它用来捕捉一切
  • *也称为Kleene plus,表示您要捕获前一个符号的一个或多个实例,在我们的案例.中;基本上你是在说“给我每一个字母”
  • (?=@)是一个积极的先行,即一种特殊的搜索功能,可确保后面的内容为@;我正在使用它将光标移到@和“停止”捕获的位置,否则+会无限期地继续
  • (?!@ruba\.com)是一个负面的预测,即一种特殊的搜索功能,可确保后面的内容不是(!@ruba\.com;我正在逃避这一点,不要把它与我之前谈论的捕捉全部符号混为一谈

现场演示here