问题描述
我希望能够修复文本文件的制表符/空格缩进。
由于某些原因,当前每行在随机位置都有空格。
例如:
space
tab
if
->tab
if
space
tab
space
tab
if
->tab
tab
if
tab
tab
space
if
->tab
tab
if
等
它应该不会影响第一个单词之后的任何内容,所以只会影响缩进:所以tab space if space boolean
应该更改为tab if space boolean
而不是tab if tab boolean
。
regex命令应该保留正确的制表符数量,只删除空格。如果一行中有4个空格,则应改为将其转换为制表符。
谢谢您的帮助。如果您还能解释一下您的正则表达式是如何工作的,我将不胜感激,因为我正在努力学习如何自己做正则表达式,而不是总是让别人来做。
如果您需要更多信息或详细信息,请询问,我将尽快回复。
我一次可以针对单个案例完成此操作,如下所示:
对于空格优先:查找:space*if
替换:if
这仅适用于没有制表符的行以及第一个单词所在的位置,如果是这样,我将对该行的起始单词执行此操作。
然后我将使用space*if
重复。
看起来我可以通过执行(?:[A-Za-z])
操作而无需捕获即可匹配单词,因此我只需将if
替换为它,它会工作得更好。
推荐答案
您可能可以一步完成此操作,但我更倾向于使用简单的方法。
首先将这4个空格转换为制表符。第一行是匹配项,第二行是替换项。
^(s*)[ ]{4}(s*)
$1 $2
然后将所有剩余的单个空格替换为空。
^( *)[ ]+
$1
在这种情况下,您不需要方括号,但即使使用SO的代码格式,也很难确保其中有空格。
第一行搜索^
行的开头,然后查找任意数量的空格(包括制表符),并将它们放入后来命名为$1
和(s*)
的匹配组中。中间正好找到四个空格[ ]{4}
。最后一部分重复匹配组,以防该侧也有制表符或更多空格。因为第二个匹配应该查找所有剩余的空格,所以第二个匹配只查找0个或更多的制表符,将它们放入捕获组,然后查找所有剩余的空格。由于它会在运行过程中查找并替换,因此会占用所有空间,并取而代之的是制表符。
这篇关于Regex用于在行的开头用制表符替换空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!