在sublime text中用正则快速选中所有邮箱:打开find→find...,勾选regular expression,输入\b[a-za-z0-9._%+-]+@[a-za-z0-9.-]+.[a-za-z]{2,}\b,点击find all即可高亮选中。

Sublime Text 里怎么用正则快速选中所有邮箱?
直接上:打开 Find → Find...(Ctrl+F / Cmd+F),勾选 Regular Expression(.* 图标),粘贴这个正则:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b然后点 Find All,所有邮箱就高亮选中了。
这个表达式覆盖常见邮箱格式,但不追求 100% RFC 合规——太严反而漏掉真实数据;比如 user+tag@domain.co.uk 能匹配,"quoted"@example.com 就不匹配,实际日志/文本里几乎遇不到后者。
- 开头
\b和结尾\b是单词边界,避免把abc@test.com.xyz中的test.com单独拎出来 -
[A-Za-z0-9._%+-]+允许邮箱前缀含点、下划线、加号、百分号、短横——这是 Gmail / Outlook 等主流服务实际支持的 - 域名部分没强制要求二级域(比如不校验
.com.cn这种双后缀),\.[A-Za-z]{2,}只保证顶级域至少两个字母,够用
一键提取出来复制成列表?别手动 Ctrl+C
选中全部邮箱后,按 Ctrl+Shift+L(Windows/Linux)或 Cmd+Shift+L(macOS),每行一个邮箱变成独立光标,再按 Ctrl+X 或 Cmd+X 剪切,就能干净粘贴成纯文本列表。
注意:如果文本里有换行符混在邮箱中间(比如邮箱被折行),Find All 会失败——正则默认不跨行。这时得先确保文本是单行格式,或者改用 (?s)\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b(开头加 (?s) 启用 dotall 模式),但代价是可能误匹配换行符附近的非邮箱内容,慎用。
- 别用
Find → Replace直接替换,除非你真想删掉其他文字——Find All+Ctrl+Shift+L更安全、可逆 - 如果邮箱前后有引号、括号、尖括号(如
<me></me>),正则本身不捕获这些符号;需要的话,把\b换成(? 和 <code>(?=[\s)>"']|$),但会变复杂,多数情况直接人工扫一眼更省时间
为什么不用 Sublime 自带的 “Email” 语法高亮来提取?
因为语法高亮(Plain Text 或 Markdown 模式下的邮箱着色)只是渲染层效果,不能批量选中或导出——它不提供 API 或命令供用户调用。你看到的高亮,和 Find All 的匹配逻辑完全无关。
有人试过切换语法为 Text → Email,发现没这选项,是因为 Sublime 没内置专用邮箱语法;所谓“邮箱高亮”,其实是某些语言语法(比如 Markdown、HTML)附带的简单规则,不稳定、不可控、不能批量操作。
- 依赖语法高亮提取 = 看得见但摸不着,等于没提取
- 正则匹配是唯一可靠路径,且响应快——几万行文本也能秒出结果
- 如果常做这类提取,可以把上面正则存进
Find面板的搜索历史(点下拉箭头就能回溯),不用每次重输
导出结果时容易忽略的换行和空格问题
用 Ctrl+Shift+L 分离后剪切,看似干净,但如果原始文本里邮箱前后有空格或制表符,那些空白也会被一起选中并剪切进去。比如 contact: me@site.com ,最后复制出来的可能是 me@site.com 。
解决办法很简单:在 Find → Replace 里,先用正则 \s*([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})\s* 匹配,并把 Replace 设为 $1,再 Replace All——这样提前清理掉多余空白,后续 Find All 出来的就是干净邮箱。
- 别图省事跳过这步,尤其处理从网页复制或邮件导出的文本,空格和全角空格(
)经常混在一起 - 如果担心误伤,先
Duplicate View(右键标签页 →Duplicate View),在副本里操作 - Mac 用户注意:系统剪贴板有时会偷偷带富文本格式,粘贴到纯文本编辑器(如 Notepad++ 或 VS Code 的纯文本模式)前,最好先过一遍
Cmd+Shift+V(无格式粘贴)










