Sublime Text中可用正则\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b配合Find All提取邮箱,需用Ctrl+Shift+L转多光标再复制以获得分行结果,全角字符和换行符需预先清理。

Sublime Text 没有“一键提取邮箱”按钮,但用 Find All 配合合适正则,3 秒内就能得到干净的纯文本邮箱列表——这是最稳、最快、也最容易复现的方式。
怎么写一个能在 Sublime 里跑通的邮箱正则?
别抄 RFC 5322 全兼容版本,Sublime 的 Boost 正则引擎不支持条件断言,硬套会卡死或匹配失败。用这个就行:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b
-
\b是单词边界,防止从abc@test.com.xyz里只抠出test.com -
[A-Za-z0-9._%+-]+覆盖 Gmail / Outlook 实际允许的前缀字符(点、下划线、加号、百分号、短横) -
\.[A-Za-z]{2,}只要求顶级域至少两个字母,能匹配.co.uk、.app、.dev,不强求二级域校验 - 如果文本含全角
@或中文空格,先用Ctrl+H替换:查找@(全角@)或中文空格,替换成英文@和普通空格
为什么 Find All 后 Ctrl+C 粘出来是一长串连在一起的?
因为 Find All 只是高亮并把光标停在每个匹配开头,并不会自动分行或转为多光标选中状态。
- 必须按
Ctrl+Shift+L(Windows/Linux)或Cmd+Shift+L(macOS),才能把每个匹配转为独立光标 - 这时再按
Ctrl+C,粘贴出来就是每行一个邮箱,无路径、无行号、无多余空格 - 漏掉这步,直接
Ctrl+C会复制成a@b.comc@d.org这种连粘结果 - 文档超 10MB 时,
Find All可能只返回前几千个结果;建议先用Ctrl+Shift+F定位到具体小文件再操作
想提取“带邮箱的整行”,正则该怎么改?
不能只匹配邮箱本身,得让正则吞下整行,否则你会丢掉上下文(比如日志里的错误码、时间戳)。
- 用
^.*\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b.*$ -
^和$锁定行首行尾,.*吞掉前后任意字符 - 匹配后,按
Ctrl+L(不是Ctrl+Shift+L)可把当前所有光标扩展为整行选中 - 若需去重,复制后粘贴到新标签页,用
Ctrl+H查找^(.*)$\s+^1$(开启 Regex + . matches newline),替换为空,再手动删重
大文件或折行邮箱怎么办?
Sublime 默认正则不跨行,如果邮箱被换行符打断(如 user@domain.com),原正则会失效。
- 优先清理格式:用
Ctrl+H替换所有换行符为空格(查找\n,替换为),再跑正则 - 慎用
(?s)模式(即(?s)\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b),它会让.匹配换行符,但容易误吞相邻非邮箱内容 - 如果文本来自 HTML 或 JSON,先用
Ctrl+Shift+F在指定目录里搜,避免打开巨型原始文件
真正容易被忽略的是:正则本身不处理引号/尖括号包裹的邮箱(如 <me@site.com> 或 "you@org.com"),这些符号不会被匹配进去;需要的话得改用环视断言,但代价是可读性下降、维护成本上升——多数时候人工扫一眼更省时间。

















