本文介绍了Regex用于在行的开头用制表符替换空格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

例如:

spacetabif->tabif

spacetabspacetabif->tabtabif

tabtabspaceif->tabtabif

它应该不会影响第一个单词之后的任何内容,所以只会影响缩进:所以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用于在行的开头用制表符替换空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 19:21