优化Python中基于requests模块的EMAIL_REGEX邮箱验证规则
解决Web Scraping中邮箱匹配的无效内容问题
针对性正则方案
直接在现有正则基础上加入负向先行断言,排除结尾是图片后缀的无效字符串:
EMAIL_REGEX = r'[\w.+-]+@(?!.*\.(png|jpg|jpeg|gif|bmp)$)[\w-]+\.[\w.-]+'
正则各部分说明
[\w.+-]+: 匹配邮箱用户名部分,覆盖字母、数字、下划线、点、加号、减号这些合法字符@: 固定匹配@符号(?!.*\.(png|jpg|jpeg|gif|bmp)$): 关键的排除逻辑——如果字符串结尾是指定的图片后缀(png/jpg等),就不匹配。你可以根据需要添加更多要排除的后缀,比如webp[\w-]+\.[\w.-]+: 确保域名部分包含至少一个点,彻底解决swiper@9这类无有效域名的无效匹配
验证效果
- 有效邮箱
info@domain.com:正常匹配 - 无效文件名
Certified-Support-Partner-White@2x-2048x612.png:因为结尾是.png,被断言排除,不会匹配 - 无效字符串
swiper@9:域名部分没有点,不满足正则要求,不会匹配
进阶优化(可选)
如果想要更严格的域名校验,确保顶级域名是至少2个字母的合法后缀(避免奇葩数字后缀),可以用这个版本:
EMAIL_REGEX = r'[\w.+-]+@(?!.*\.(png|jpg|jpeg|gif|bmp)$)[\w-]+\.[a-zA-Z]{2,}([\w.-]*[a-zA-Z])?'
补充建议
如果遇到极少数正则没覆盖的无效项,可以配合简单的字符串过滤兜底,比如:
valid_emails = [email for email in matched_emails if not any([suffix in email for suffix in ['@2x', '@3x']])]
但上面的正则已经能解决绝大多数核心问题。
内容的提问来源于stack exchange,提问作者Bram
相关产品推荐
相关产品推荐

