正则表达式在行首用制表符替换空格

Aeq*_*tas 5 regex notepad++

我希望能够修复文本文件的制表符/空格缩进。

目前,由于某种原因,每行在随机位置都有空格。

例如:

space tab if -> tab if

space tab space tab if -> tab tab if

tab tab space if -> tab tab if

等等。

它不应该影响第一个单词之后的任何内容,因此只会影响缩进: Sotab space if space boolean应该更改为tab if space booleannot tab if tab boolean

regex 命令应该保留正确数量的制表符并删除空格。如果一行中有 4 个空格,则应将其转换为制表符。

感谢您的帮助。如果您还可以解释您的正则表达式是如何工作的,我将非常感激,因为我正在尝试学习如何做我自己的正则表达式,而不是总是要求其他人这样做。

如果您需要更多信息或详细信息,请询问我会尽快回复。


我可以一次完成一个案例,如下所示:

首先对于空格:查找:space*if替换:if这仅适用于没有制表符的行以及第一个单词所在的位置,如果是这样,我会为该行的起始单词执行此操作。

然后我会重复space*\tif

看起来我可以在不捕获的情况下匹配一个单词,(?:[A-Za-z])所以我可以换掉if这个,它会更好地工作。

Jer*_*une 6

您可能可以一步完成此操作,但我更偏向于简单的方法。

首先将 4 个空格转换为制表符。第一行是匹配,第二行是替换。

^(\s*)[ ]{4}(\s*)
$1\t$2
Run Code Online (Sandbox Code Playgroud)

然后用空替换所有剩余的单个空格。

^(\t*)[ ]+
$1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不需要方括号,但即使使用 SO 的代码格式,也很难确保有空格。

为行的开始的第一行搜索^,然后发现在后来被命名为一个匹配组的空白(包括翼片),并将它们的任何量$1(\s*)。中间正好找到四个空格[ ]{4}。最后一部分重复匹配组,以防该侧也有制表符或更多空格。

由于第二个匹配项应该查找所有剩余的空格,因此第二个匹配项只查找 0 个或多个选项卡,将它们放入一个捕获组,然后查找剩余的所有空格。由于它会在进行中查找和替换,因此它会吞噬所有空格并替换为制表符。

  • 可能会,具体取决于您的解析器。N++ 并不像 sed 那样贪婪,因此它通常可以在不指定匹配应该是最短可能匹配的情况下完成操作。不过,你的直觉是对的。如果您想确保它匹配最少数量的空白直到正好 4 个空格,请将匹配组改为“(\s*?)”。 (2认同)