我希望能够修复文本文件的制表符/空格缩进。
目前,由于某种原因,每行在随机位置都有空格。
例如:
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这个,它会更好地工作。
您可能可以一步完成此操作,但我更偏向于简单的方法。
首先将 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 个或多个选项卡,将它们放入一个捕获组,然后查找剩余的所有空格。由于它会在进行中查找和替换,因此它会吞噬所有空格并替换为制表符。