sublime text可通过find面板配合正则表达式\b[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\.[a-za-z]{2,}\b批量选中并复制邮箱,按alt+enter(win/linux)或ctrl+cmd+g(macos)全选匹配项,再粘贴处理。

用 Find 面板配合正则直接匹配邮箱
Sublime Text 本身不提供“提取并导出”邮箱的独立功能,但通过 Find(Ctrl+F / Cmd+F)+ 正则,能高亮、选中、批量复制所有邮箱——这是最常用也最可靠的方式。
关键不是写最全的 RFC 兼容正则,而是用一个**兼顾准确率和可读性**的模式。推荐这个:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b
-
\b确保前后是单词边界,避免匹配到foo@bar.com.xyz中的bar.com这种中间片段 -
[A-Za-z0-9._%+-]+覆盖主流本地部分(如test.email+tag、user_name),不支持过长或冷门字符(如引号包裹的"john..doe"@example.com),但这类在代码里极少见 -
@字面量,必须存在 -
[A-Za-z0-9.-]+匹配域名主体,允许连字符(my-site.com),但不匹配连续点或开头/结尾连字符(这些本就非法) -
\.[A-Za-z]{2,}强制要求一个点 + 至少两个字母的顶级域(.com、.org),排除.c或纯数字 TLD(目前极少)
开启正则模式后,按 Alt+Enter 一键全选所有匹配项
很多人输完正则却只能逐个点击,其实 Sublime 支持批量操作:
- 确保
.*按钮已激活(即正则模式开启) - 输入上述邮箱正则,按
Enter查看是否高亮正确 - 确认无误后,按
Alt+Enter(Windows/Linux)或Ctrl+Cmd+G(macOS),所有匹配项立刻被同时选中 - 此时可直接
Ctrl+C复制,粘贴到 Excel、文本文件或另一编辑器中处理
注意:Alt+Enter 是“Find All”,不是“Replace All”。如果误点了替换,记得用 Ctrl+Z 撤回——它不会自动修改原文,除非你主动执行替换操作。
遇到注释或字符串里的邮箱?加负向先行断言更稳妥
默认正则会把 // contact: admin@example.com 或 email = "user@test.org" 里的邮箱也抓出来。如果你只想提取“裸露”的、非注释非字符串的邮箱(比如变量赋值、函数参数),需要排除引号和双斜杠前缀:
(?<!["'])(?<!\s//\s*)\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b(?![;"'])
(? 表示前面不能是单引号或双引号(排除字符串内)(? 表示前面不能是空格+<code>//+可选空格(排除行注释内)-
(?![;"'])表示后面不能是分号、双引号、单引号(防止匹配到mail@example.com;的分号部分) - 这个版本略慢一点,且在复杂嵌套场景(如多行字符串、JS 模板字面量)仍可能误判,但对大多数 .py/.js/.php 文件足够用
别依赖“一键导出”,复制后建议用简单脚本去重清洗
Sublime 不内置去重或导出为 CSV 功能。即使你用 Alt+Enter 全选复制,结果也是带换行的纯文本,可能含重复项、空行或多余空格。
真正省时间的做法是:复制后,打开新标签页,粘贴,再用 Sublime 自带的 Sort Lines(右键 → Sort Lines)+ Remove Duplicate Lines(需先安装 Package Control 的 AdvancedNewFile 或手动操作:选中全部 → Ctrl+Shift+P → 输入 Remove Duplicate Lines)。
或者,直接扔进 Python 一行命令里快速清洗:
print('\n'.join(sorted(set([line.strip() for line in open('emails.txt') if '@' in line]))))
正则再准,也敌不过数据源头混杂;提取只是第一步,后续清洗才是让结果可用的关键。










