Python如何从带mailto的异常字符串中提取标准邮箱地址?
处理方案
你拿到的是经过Quoted-Printable(QP)编码的邮件内容,存在两个需要修复的异常点:
- HTML属性中的
=被转义为QP编码格式的3D - 邮箱地址中间的换行是QP编码的软换行,是邮件传输时为了满足单行长度限制自动添加的,不属于邮箱本身的内容
实现代码
import quopri import re # 待处理的原始字符串 raw_content = '''a href3D"mailto:ahmet ca@abc.tr"''' # 1. 先做QP编码解码,还原原始HTML内容 decoded_content = quopri.decodestring(raw_content.encode("utf-8")).decode("utf-8") # 2. 正则匹配mailto协议后的邮箱地址 email_pattern = re.search(r"mailto:([^\"]+)", decoded_content) if email_pattern: # 3. 去除邮箱中所有多余的空白、换行符,得到标准格式 standard_email = re.sub(r"\s+", "", email_pattern.group(1)) print(standard_email)
运行上述代码输出结果为:ahmetca@abc.tr
逻辑说明
- 邮件传输过程中特殊字符、过长行都会通过QP编码处理,使用Python标准库
quopri可以直接完成解码,自动还原href3D为href=、处理软换行 - 解码后提取邮箱后额外做一次全局空白符替换,可以兼容其他可能残留的异常格式,保证输出的邮箱地址符合标准规范
内容的提问来源于stack exchange,提问作者Muratcan Çoban
相关产品推荐
相关产品推荐

