必须先用正则在查找面板(Ctrl+F)中定位目标,再通过Alt+F3或Ctrl+Shift+L生成多光标编辑;直接对多行光标应用正则无效,因多行编辑本身不支持正则匹配。

多行编辑本身不支持正则匹配,想靠 Ctrl+Shift+L 或 Ctrl+D 直接选中符合正则的文本?不行。必须先用正则把目标找出来,再配合多行编辑操作——这是唯一可靠路径。
怎么用正则批量定位要清洗的数据行
Sublime 的查找面板(Ctrl+F)默认是普通字符串搜索,得手动切到正则模式(点击 .* 图标或按 Alt+R)。比如清洗 CSV 中带多余空格的字段:
输入正则:\s*,\s*,勾选 Match case 和 Whole word 通常不需要,除非你明确要限制匹配范围;Wrap around 建议打开,避免漏掉开头或结尾的匹配项。
常见踩坑点:
- 忘记转义特殊字符:比如想匹配字面量
.,得写成\.,否则会匹配任意字符 - 贪婪匹配导致跨行或过长:用
.*?替代.*,尤其在清洗日志或 HTML 片段时更安全 - 换行符不在默认匹配范围内:如果正则要跨行,得启用
.\n模式(点击\n图标),否则.不匹配\n
选中所有匹配项后,怎么进入多行编辑状态
找到全部匹配项后,别急着按 Ctrl+Enter ——那是插入换行,不是多光标。正确操作是:
- 按
Alt+F3:一次性选中所有当前匹配项,每个匹配区域都会生成一个光标(适合替换、删除、包裹等操作) - 按
Ctrl+Shift+L:把当前选中的每一行拆成独立光标(适合在每行末尾加内容、统一缩进调整) - 如果匹配的是零宽断言(如
^或\b),Alt+F3仍有效,光标会落在断言位置,可用于批量插入前缀/后缀
注意:Ctrl+D 是逐个扩展选择,不适合“全量匹配→批量编辑”场景,容易漏或误选。
正则替换 + 多光标编辑的组合技
单纯替换不够灵活时,比如要把 JSON 数组里每个对象的 id 字段值统一加前缀 user_,但只改 id 不动其他字段:
第一步:用正则 "id"\s*:\s*"(\w+)" 找到所有 id 行,开启 Regex 和 Case sensitive
第二步:按 Alt+F3 选中全部匹配项 → 此时光标停在引号内(因为括号捕获组没被选中)
第三步:按 ← 左箭头一次,让光标移到引号内开头 → 再输入 user_
关键细节:
- 捕获组
(\w+)在替换框里可用$1引用,但多光标编辑下直接键盘输入更可控,尤其涉及格式微调时 - 如果替换后需要补全引号或逗号,建议先用正则替换预留占位符(如
"id": "user_$1"),再用多光标统一删/加符号 -
Ctrl+U(软撤销)比Ctrl+Z更精准,能回退单次多光标操作,避免整块内容被撤错
为什么有些正则在 Sublime 里不生效
Sublime 使用的是 Boost.Regex 引擎,不支持某些现代正则特性:
- 没有
(? 这类可变长度的先行断言,要用 <code>\b或^等固定边界替代 - 不支持
\K重置匹配起点,得靠捕获组 +$1模拟 - Unicode 属性类(如
\p{L})不可用,中文匹配老实用[\u4e00-\u9fa5] - 性能敏感:过长的回溯正则(如
(a+)+b)可能卡死,测试时先用小范围文本验证
真正难的不是写出正则,而是判断哪些部分该交给正则做、哪些该留给多光标手动微调——边界模糊时,宁可分两步,也别硬塞进一个正则里。


















