使用方法
- 把要处理的文本整段粘贴进「待处理文本」框。框里已预置一段 280 字符的示例,里面把逗号、顿号、分号、全角冒号四种分隔符和中文说明混在一起,直接点「提取邮箱」就能看到结果。
- 「去重」默认勾选:按归一化后的形式比对,相同的地址只保留第一条,重复的那一条会单独列在结果行里。
- 「域名大小写」默认勾选:把 @ 后面的域名统一转成小写,@ 前面的本地部分按原文保留,方便回溯这条地址来自哪一行。
- 「输出分隔符」决定把结果拼成一整段时用什么隔开:换行、逗号、分号或空格。选逗号时相邻两项之间会加一个空格,得到 a@x.com, b@y.com 这样的形态(有些页面把它记作「提取邮箱Addresses」,指的都是同一件事)。
- 点「提取邮箱」立即给出命中数、去重后数量、重复项、顶层域名分布、按域名分组的对照表和结果列表;列表超过 12 行时列表底部会出现「加载更多」。
- 「复制结果」按当前分隔符复制整段文本;「导出 CSV」导出序号、邮箱、域名三列,文件开头带 UTF-8 BOM,用 Excel 双击打开不会乱码。
这个批量提取邮箱地址工具能解决什么问题
营销素材、客户回执、聊天记录导出、报名表格粘贴出来的内容,邮箱往往散落在不同行、被各种标点包夹:中文顿号、全角逗号、半角分号、中文冒号、括号、后面还跟着一长串说明文字。手工一个个框选既慢又容易漏,复制到表格里还会因为分隔符不统一而串列。本工具用一条正则把整段文本一次性扫完,输出干净的地址清单,再顺手做三件人工很难做对的事:一是按归一化口径去重,避免把同一个联系人当成两条线索;二是按域名分组并给出顶层域名分布,一眼看出有多少是同一家邮件服务商、有多少是自带域名的客户;三是把「看起来像邮箱但其实不合法」的写法挑出来单独列,避免把它们一起粘进群发列表里。
它适用于整理客户名单、清理导出的通讯录、核对表单提交结果、从较长文档里抽取联系人,以及在导入 CRM 或群发平台之前先做一遍去重与合法性筛查。
计算原理与变量说明
识别的核心是一条带全局标记的正则,它由三段组成:本地部分 [A-Za-z0-9._%+\-]+、一个 @、域名部分 [A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9\-]*[A-Za-z0-9])?)*\.[A-Za-z][A-Za-z]+,末尾加 g 让它在整段文本里反复匹配。
- 域名各级首尾为什么不能是连字符:域名标签的写法是首字符与末字符必须是字母或数字,连字符只能夹在中间。所以
4-1@a-b.com合法,而-a@x.com里的标签以连字符开头、a-@x.com里的标签以连字符结尾,都会被判掉。这也是很多「看起来正常」的地址被漏掉的原因。 - 为什么
admin@localhost不算邮箱:正则在域名段之后强制要求\.[A-Za-z][A-Za-z]+,也就是「至少一个点 + 顶级域名不少于两位字母」。localhost没有点,缺少顶级域名,因此不构成可投递地址。这类写法在内网主机名、容器名里很常见,可以当标签用,但不能当邮箱用。 - 为什么要把全角 @ 与中文顿号当分隔符处理:中文输入法下 @(U+FF20)很容易混进来,它和半角 @ 是两个不同字符,直接匹配会漏。顿号(U+3001)、全角逗号(U+FF0C)、全角分号(U+FF1B)、全角冒号(U+FF1A)同理:它们既可能出现在地址两侧把地址包住,也可能被误写进地址内部。本页在切分候选片段时把这几种全角标点与半角标点一视同仁,再对每个候选片段单独判合法性,从而给出「疑似无效」的具体原因,而不是笼统地说一句识别失败。
- 去重的两种口径:字面重复指两个字符串逐字符相同,例如
chen.wei@example.com出现两次;归一化重复指把大小写差异抹平后再相同,例如SUN.MING@outlook.com与sun.ming@outlook.com在字面上不同、归一化后是同一条。本页采用归一化口径(整体转小写后比对),因为绝大多数邮件服务商投递时并不区分大小写,把它们当成两条线索会导致重复触达。示例文本里就同时存在这两种情况:字面重复 1 条,归一化后仍是那 1 条。 - 为什么本地部分保留大小写、域名强制小写:域名的大小写不敏感,RFC 里明确要求不区分,统一转小写才能让
Outlook.com与outlook.com归入同一个域名分组;而本地部分在 RFC 里理论上是区分大小写的,只是主流服务商实际上不区分。所以本页在「命中明细」里保留原文大小写,在「去重比较」时再整体归一化,两者分工不同,既方便核对来源,又能保证去重不漏。 - 为什么长文本必须一次性全局匹配:逐行处理时,一行末尾被硬换行截断的地址会被拆成两半,两侧都不成立,于是整条丢失;跨行紧邻的地址也容易被误判成一条。带
g标记的正则在整段文本上从左到右扫描,遇到不满足的字符就自动回退重试,天然处理这种跨行与跨分隔符的情形。
完整示例(数值仅作演示)
示例条件:使用页面预置的那段文本(含 5 行、逗号/顿号/分号/全角冒号混排),去重与域名转小写都保持默认勾选,输出分隔符为换行。
- 文本总长 280 字符;其中被识别出来的邮箱字符串合计 192 字符。
- 命中 10 个:chen.wei@example.com、li_na@qq.com、sales@liuquan.net、support@liuquan.net、chen.wei@example.com、wang.fang@163.com、zhao.qiang@hotmail.com、SUN.MING@outlook.com、info@tech-supply.co.uk、zhang_li@company.com.cn。
- 归一化去重后 9 个:chen.wei@example.com、li_na@qq.com、sales@liuquan.net、support@liuquan.net、wang.fang@163.com、zhao.qiang@hotmail.com、sun.ming@outlook.com、info@tech-supply.co.uk、zhang_li@company.com.cn。
- 重复项 1 个:
chen.wei@example.com。注意SUN.MING@outlook.com并没有被算成重复,因为文本里只出现过一次,它只是在归一化时被转成了小写。 - 按域名统计:liuquan.net 出现 2 次,example.com、qq.com、163.com、hotmail.com、outlook.com、tech-supply.co.uk、company.com.cn 各 1 次,合计 9 条,与去重后的条数一致。
- 顶层域名分布:com 5、net 2、cn 1、uk 1,正好对应 9 条地址的末级标签。
- 疑似无效 3 类:
admin@localhost(域名部分没有点)、name@@example.com(出现两个 @)、中文@example.com(本地部分含非 ASCII 字符)。 - 若把结果改成逗号分隔并合并成一行,得到:
chen.wei@example.com, li_na@qq.com, sales@liuquan.net, support@liuquan.net, wang.fang@163.com, zhao.qiang@hotmail.com, sun.ming@outlook.com, info@tech-supply.co.uk, zhang_li@company.com.cn,共 9 项。这条合并行长度约 180 字符,比原文 280 字符短,因为它去掉了说明文字与重复项。
把 10 个命中减掉 9 个去重结果,正好得到 1 个重复项,这也是检查去重是否生效的最快办法。示例中的文本、域名与数字均为演示数据,不指向任何真实联系人。
输出分隔符与输出形态对照表
下表固定使用上面的去重结果 9 条,只改变「输出分隔符」,用于挑选最适合下游系统的形态。
| 分隔符 | 相邻两项之间 | 适用场合 | 示例开头 |
|---|---|---|---|
| 换行 | 一个换行符 | 再粘贴进 Excel 单列、逐行导入 | chen.wei@example.com |
| 逗号 | 逗号 + 一个空格 | 写入邮件客户端的收件人栏、CSV 文本 | chen.wei@example.com, li_na@qq.com |
| 分号 | 分号 + 一个空格 | Outlook 收件人栏的默认分隔符 | chen.wei@example.com; li_na@qq.com |
| 空格 | 一个空格 | 命令行参数、部分群发工具的多值输入 | chen.wei@example.com li_na@qq.com |
同一批 9 条结果,四种分隔符只是连接方式不同,条数与顺序都不变;顺序始终是首次出现的先后,重复项被折叠到第一次出现的位置。
结果边界、舍入与适用说明
- 本页不限制输入长度,但极长文本(十万字符以上)在浏览器里做一次全局匹配会占用可感知的时间,建议分段处理。
- 命中数指正则匹配到的字符串个数,不是去重后的个数;去重后数量才是可以直接拿去群发的条数。
- 正则只认可打印 ASCII 与「点、下划线、百分号、加号、连字符」这几种符号构成的本地部分,带引号、带空格(RFC 允许用引号包住)的罕见写法不会被识别。
- 域名判定要求至少一个点、顶级域名不少于两位字母,因此
admin@localhost、a@b这类写法一律不通过。 - 本页不解析
mailto:链接、不做跳转跟随、也不验证邮箱是否真实存在;「合法」仅表示写法符合常见规则,投递能否成功取决于对方服务器。 - 「导出 CSV」写出的文件以 UTF-8 BOM 开头,个别命令行工具会把 BOM 当成首个字段的一部分,需要按 UTF-8 读取后再去掉。
- 结果列表每 12 行一屏,「加载更多」每次追加 12 行;导出与复制始终针对全部结果,不受已展开行数影响。
常见问题
为什么 SUN.MING@outlook.com 被显示成了小写?
因为去重按「整体转小写」归一化后比较,去重结果统一以小写形态输出,方便比对与入库。如果你需要保留原文大小写核对来源,把「去重」取消勾选,列表就会回到本地部分保留大小写、域名按设置转小写的形态。
为什么 admin@localhost 不算邮箱?
正则在域名段之后强制要求「一个点 + 顶级域名不少于两位字母」。localhost 只是一个主机名,没有点也没有顶级域名,写起来像邮箱但无法投递到外部。同理 a@b 也不算。
name@@example.com 是被怎么判掉的?
本页先把文本按标点与空白切成候选片段,再对每个含 @ 的片段做完整匹配。这个片段里有连续两个 @,属于「出现两个 @」,会进入疑似无效清单并给出具体原因,而不是被悄悄忽略。
大小写到底要不要统一?
域名部分一定要统一,RFC 要求域名不区分大小写,不统一会让同一域名被拆成两组。本地部分理论上区分大小写,但 Gmail、Outlook、QQ 邮箱等主流服务商实际都不区分,所以做去重时应按不区分处理,才不至于重复触达同一收件人。
为什么中文顿号和全角逗号也能当分隔符?
因为它们经常出现在中文文本里的地址两侧,例如「chen.wei@example.com、li_na@qq.com,销售咨询」。本页在切分候选片段时把全角顿号、全角逗号、全角分号、全角冒号与半角标点同等对待,地址两侧就不会被粘上多余的标点。
逐行处理不是更保险吗?
恰恰相反。一行末尾被硬换行截断的地址会被拆成两半,两侧都不成立从而整条丢失;跨行紧邻的两条地址还可能被误连成一条。带全局标记的正则在整段文本上扫描并自动回退重试,跨行与跨分隔符都能正确处理。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。计算在当前浏览器本地完成,不会上传输入内容。