<p>^\s+ 是唯一靠谱的写法,因它匹配行首一个及以上空白字符(含空格、制表符等),不误删空行;而 ^ + 漏制表符,^\s* 可能零匹配致异常。</p>

Notepad++ 里批量删行首空格,必须用 ^\s+,不能写成 ^ + 或 ^\s*——前者漏掉制表符,后者可能误删空行。
为什么 ^\s+ 是唯一靠谱的写法
行首空格不是单指半角空格,还包括制表符 \t、全角空格、换行符类空白(\r、\f、\v)等。^\s+ 中的 \s 在 Notepad++ 正则里默认覆盖全部这些字符,+ 表示“至少一个”,所以不会匹配空行本身(空行没“行首空白”可删)。而 ^ + 只认半角空格,^\s* 允许零长度匹配,可能触发意外行为。
- 必须勾选「正则表达式」模式,否则
^和\s都当字面字符处理,完全不生效 - 先按
Ctrl + F输入^\s+,点「全部高亮显示」,确认只亮在你真想删的位置(尤其检查首行是否含 UTF-8 BOM:\xEF\xBB\xBF,它不算\s,得单独先删) - 如果文件右下角标着「只读」,替换会静默失败,需先取消只读属性
常见错误现象和对应解法
删完发现缩进乱了、空行变少了、或某些行开头多出空格,大概率是踩了下面几个坑:
-
^\s*写成^\s*:星号允许零长度匹配,可能导致空行被误判为“可删”,实际没删但光标位置错乱 - 替换框里不小心留了个空格:结果每行开头多一个空格,对齐全崩
- 用了「. 匹配换行符」选项:导致
.*跨行吞内容,尤其在日志或配置块里非常危险 - 想一并删行尾空格却没分步操作:
^\s+不动行尾,得另跑一次「编辑 → 行操作 → 删除尾部空白」才干净
想保留缩进而只统一缩进?别硬套正则
纯正则做不到智能缩进判断。如果你目标是“把所有行首空白统一换成 2 个空格”,不要试图用 ^\s+ 直接替换为两个空格——不可见字符(比如混合的 \t 和空格)会让结果不稳定。
- 更稳的做法是:先用
^\s+替换为空,清掉所有行首空白;再用「编辑 → 行操作 → 增加缩进」两次,它不依赖正则,也不怕不可见字符干扰 - 如果必须用正则控制缩进量,可用
^(?!\s{0,2}$)\s+匹配“非 0–2 个空白”的行首空白,再替换为两个空格,但这个表达式对新手容易写错,且不处理 BOM - 真正麻烦的从来不是正则怎么写,而是你面对的文本里混了多少种空白:BOM、零宽空格、全角空格、混合制表符……它们不会报错,只会悄悄让替换结果和预期差那么一点


















