^\s+ 是唯一能正确匹配所有常见缩进字符(空格、tab、全角空格、bom后空白)的正则写法,^ + 和 ^\s* 均存在匹配缺陷;必须启用「正则表达式」模式且关闭「匹配大小写」和「全字匹配」,否则无效。

必须用 ^\s+,不是 ^ + 或 ^\s*
直接写 ^\s+ 是唯一能覆盖空格、Tab、全角空格、BOM 后空白等所有常见缩进字符的写法。^ + 只认半角空格,遇到 Tab 就漏掉;^\s* 的 * 允许零长度匹配,会在空行上误触发,导致替换后多出意外换行或错位。
常见错误现象:
- 替换了几十行但缩进还在——大概率用了
^ +,没吃掉 Tab - 空行被删掉或变成乱码——用了
^\s*,*匹配了空行本身 - 替换后每行开头多一个空格——
替换为框里不小心粘了个空格
勾选「正则表达式」是硬性前提,其他选项要关掉
^\s+ 在「普通」或「扩展」模式下完全无效:^ 被当字面符号,\s 当成两个独立字符。必须手动勾选左下角的「正则表达式」,且确认「匹配大小写」和「全字匹配」处于未勾选状态——它们虽不干扰 ^,但一旦启用,可能让替换静默失败(界面无报错、无变化)。
操作前建议先验证:
- 按
Ctrl + F,输入^\s+,勾选「正则表达式」,点「全部高亮显示」——只有真正带缩进的行被标蓝才算有效 - 右下角状态栏若显示「只读」,替换会静默失败,需先取消文件只读属性
- UTF-8 BOM 文件首行若看似空,其实是
\xEF\xBB\xBF开头,\s不包含 BOM,得单独先删(菜单:编码 → 转为 ANSI,再转回 UTF-8 无 BOM)
跨文件批量处理时,换行符不统一会导致漏匹配
^\s+ 在 Windows(\r\n)、Unix(\n)、Mac(\r)换行格式下行为不一致。尤其在「在文件中查找→替换」时,如果目标文件混用换行符,部分行首空白可能不被识别。
稳妥做法:
- 先统一格式:菜单 → 编辑 → 文档格式转换 → 转为 Windows 格式(即
\r\n) - 避免直接「在文件中替换」,改用「文件 → 批处理 → 添加所有打开的文档」,再对每个标签页单独执行
^\s+替换 - 替换前务必保存或备份——Notepad++ 正则替换不可撤回到单步粒度,大文件出错后 Ctrl+Z 可能失效
想保留 Tab 缩进只删空格?别硬套 ^\s+
项目里若明确区分 Tab 做缩进、空格做对齐,^\s+ 会一锅端。这时不能靠单次正则解决:
- 先跑一次
^\t*(注意末尾是空格),替换为空,反复执行直到无变化——清理「Tab 后跟空格」的混合缩进 - 再跑一次
^ +清纯空格行首 - 最后用「编辑 → 行操作 → 删除尾部空白」收尾,避免空格残留影响后续处理
真正麻烦的从来不是正则怎么写,而是你面对的文本里混了多少种空白:BOM、零宽空格、全角空格、混合制表符……它们不会报错,只会悄悄让结果和预期差那么一点。











