正则表达式用行开头的制表符替换空格

时间:2015-10-09 00:04:10

标签: regex notepad++

我希望能够修复文本文件的标签/空格缩进。

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

例如:

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并且它会更好地工作。

1 个答案:

答案 0 :(得分:4)

你可以一步到位,但我更偏向于简单的方法。

首先将4个空格翻译成标签。第一行是匹配,第二行是替换。

^(\s*)[ ]{4}(\s*)
$1\t$2

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

^(\t*)[ ]+
$1

在这种情况下你不需要方括号,但是要确保有一个空格,即使使用SO的代码格式也有点困难。

第一行搜索行^的开头,然后查找任意数量的空白(包括制表符),并将它们放入后来名为$1 (\s*)的匹配组中。中间恰好找到四个空格[ ]{4}。如果在那一侧有标签或更多空格,最后一部分会重复匹配组。

由于第二个匹配应该是找到所有剩余空格,第二个匹配只查找0个或更多选项卡,将它们放入捕获组,然后找到剩余的剩余空格。由于它随着它的发现和替换,它会吞噬所有空格并替换为标签。