我希望能够修复文本文件的标签/空格缩进。
目前,由于某种原因,每行都有随机位置的空格。
例如:
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
这仅适用于没有制表符的行以及第一个单词的位置,如果是,我会对该行的起始单词执行此操作。< / p>
然后我会重复space*\tif
。
看起来我可以通过(?:[A-Za-z])
来匹配单词而不捕获所以我可以为此换出if
并且它会更好地工作。
答案 0 :(得分:4)
你可以一步到位,但我更偏向于简单的方法。
首先将4个空格翻译成标签。第一行是匹配,第二行是替换。
^(\s*)[ ]{4}(\s*)
$1\t$2
然后替换所有剩余的单个空格。
^(\t*)[ ]+
$1
在这种情况下你不需要方括号,但是要确保有一个空格,即使使用SO的代码格式也有点困难。
第一行搜索行^
的开头,然后查找任意数量的空白(包括制表符),并将它们放入后来名为$1
(\s*)
的匹配组中。中间恰好找到四个空格[ ]{4}
。如果在那一侧有标签或更多空格,最后一部分会重复匹配组。
由于第二个匹配应该是找到所有剩余空格,第二个匹配只查找0个或更多选项卡,将它们放入捕获组,然后找到剩余的剩余空格。由于它随着它的发现和替换,它会吞噬所有空格并替换为标签。