必须关掉“. matches newline”才能让^\s*$正确匹配空行,否则^和$失效;replace with框须完全为空;中文混排时需手动扩展空白字符集,如\u3000、\u200b等。

Sublime Text 处理大文本数据,不是靠“教程感”堆砌步骤,而是靠三件事卡死:正则写对、环境调对、操作顺序对。错一个,就白忙半小时。
为什么^\s*$删不干净空行?必须关掉 . matches newline
^\s*$ 看似万能,但一粘贴网页或 Excel 数据就漏删——根本不是表达式问题,是 Sublime 默认让 . 匹配换行符(\n)导致锚点 ^ 和 $ 失效。它会把多行内容当成一行去匹配,^\s*$ 就永远找不到“空行”。
- 务必点击查找面板右下角的
\n图标,让它处于未高亮状态(即禁用.匹配换行) -
Replace With框必须完全为空,填一个空格或\n都会导致每删一行反而多塞一个换行 - 中文输入法(如搜狗)常劫持
Ctrl+H或阻止粘贴,建议切英文输入法后手动敲^\s*$
中文混排时\s根本不管用:全角空格、零宽空格得手动加
\s 只认 ASCII 空白( 、\t、\r、\n),对中文全角空格(\u3000)、零宽空格(\u200b)、不间断空格(\u00a0)完全视而不见。这就是你删完还“看着空、实则删不掉”的原因。
- 查全角空格:直接复制一个进查找框,或输
\u3000 - 批量清理混合空白:用
[ \t\n\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+替换为单个半角空格 - 若要保留段落间空行,改用
[ \t\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+(?=\S),只匹配“后面紧跟非空白字符”的空白块
跨行匹配别用.*:[\s\S]才是可靠写法
想删 JSDoc 注释块 /** ... */ 或 HTML 标签对?写 /\*\*.*\*/ 一定失败——因为 . 默认不匹配换行符。Sublime 的 PCRE 引擎不会自动开启跨行模式。
- 用
[\s\S]代替.*:/\*\*[\s\S]*?\*/才能真正匹配任意长度、含换行的注释块 - 贪婪控制很重要:一定要用
*?(非贪婪),否则[\s\S]*会从第一个/**一路吃到文件末尾最后一个*/ - 删 HTML 标签优先用
]*>,它靠否定字符集避开img alt="A 这类陷阱;若标签被折行(<code><div>),先统一换行符:<code>(?:\r\n|\r|\n)+→\n,再跑]*>提取字段时捕获组别乱用$1:Alt+F3 + 光标微调更可控
比如要把 JSON 中所有
"id": "123"改成"id": "user_123",很多人直接写替换为"id": "user_$1",结果引号错位、逗号丢失、格式崩坏。- 正确路径:先用正则
"id"\s*:\s*"(\w+)"查找 → 按Alt+F3选中全部匹配项 → 此时光标落在引号内开头(因捕获组没被选中)→ 按←左箭头一次 → 输入user_ - 这样避免了替换逻辑和格式细节耦合,尤其适合要加前缀/后缀+补符号的场景
- 如果后续要统一补引号或逗号,先用正则替换预留占位符(如
"id": "user_$1"),再用多光标统一调整
大文本清洗最易忽略的其实是编码和文件大小限制:Sublime 默认对 >10MB 文件禁用正则查找,且中文系统下常以 GBK 读取 UTF-8 内容,导致乱码变方块。这些不在正则里,但在你点下
Replace All前,必须先确认File → Reopen with Encoding → UTF-8和右下角显示的换行符类型。 - 正确路径:先用正则











