You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式(Regex)在Notepad++中减半行首<前的空格数?

解决Notepad++中行首空格减半(<字符前的行首空格)

需求回顾

需要将每行<字符前的行首连续空格数量减半,行内的空格(如<之后内容中的空格)保持不变。

现有输入代码:

<html>
    <body>
        <p>ligne normale</p>
        <p>ligne      with    2 spaces  </p>

期望输出:

<html>
  <body>
    <p>ligne normale</p>
    <p>ligne      with    2 spaces  </p>

之前方案的问题

  • 正则\s{2}(?<=^\s*)报错:PCRE 7.8中后行断言(lookbehind)要求匹配固定长度的字符串,而^\s*是可变长度,因此不被支持。
  • 正则\s{2}(?=(\s{2})*<)误删行内空格:该正则未限定匹配范围为行首,会误匹配行内符合两个空格+若干组两个空格+<的内容,导致行内空格被错误替换。

正确的正则替换方案

方案1:精准匹配行首到<前的空格(推荐)

  • 查找目标:^(\s{2})(?=\s*<)
  • 替换为: (单个空格)
  • 操作步骤:在Notepad++中打开"查找替换"窗口(快捷键Ctrl+H),选择"正则表达式"模式,输入上述正则和替换内容,点击全部替换即可。

原理说明

  • ^:限定匹配从行首开始,确保只处理行首的空格。
  • (\s{2}):匹配行首的两个连续空格。
  • (?=\s*<):正向预查,确保匹配的空格后面(可以间隔任意数量空格)是<字符,避免误处理行内内容。
  • 替换为单个空格后,每两个行首空格会被替换成一个,实现数量减半的效果。

方案2:极简行首匹配(适用于行首直接跟<的场景)

如果你的所有目标行都是行首空格后直接跟<(无其他字符),可以用更简单的正则:

  • 查找目标:^(\s{2})
  • 替换为: (单个空格)
  • 同样选择"正则表达式"模式,点击全部替换即可完成需求。

特殊情况处理(行首空格为奇数)

如果行首空格是奇数个(比如3个),执行一次替换后会变成2个(前两个替换为1个,加上剩余1个)。若需要将奇数个空格减半取整(3→1),只需再次点击全部替换即可,直到没有匹配项为止。

内容的提问来源于stack exchange,提问作者schlebe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:30:24