使用正则表达式排除特定的电子邮件地址

时间:2012-03-14 18:09:35

标签: python regex email

我有这个正则表达式来提取工作正常的电子邮件:

([a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])

然而,有些电子邮件我不想包括:

server@example.com
noreply@example.com
name@example.com

我一直在尝试添加像^(?!server | noreplay | name)这样的东西但是没有用。

同样如上所述使用括号会产生(名称,域名)?

的元组

2 个答案:

答案 0 :(得分:1)

请在解压缩后查看这些电子邮件地址......

bad_addresses=['server@example.com', 'noreply@example.com', 'name@example.com']
emails=re.findall('[a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]', contentwithemails)

for item in emails[:]:
  if item in bad_addresses:
    emails.remove(item)

你必须做一些电子邮件(emails[:]),因为你不能在不断改变大小的列表上进行for循环。这会创建一个“幽灵”列表,可以在真实列表被执行时读取。

答案 1 :(得分:0)

检查您的正则表达式中的结果,查找与错误电子邮件列表匹配的任何电子邮件。

results = list_from_your_regex
invalids = ['info', 'server', 'noreply', ...]
valid_emails = [good for good in results if good.split('@')[0] not in invalids]