Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式将行开头的空格替换为制表符_Regex_Notepad++ - Fatal编程技术网

Regex 正则表达式将行开头的空格替换为制表符

Regex 正则表达式将行开头的空格替换为制表符,regex,notepad++,Regex,Notepad++,我希望能够修复文本文件的制表符/空格缩进 由于某些原因,目前每一行的随机位置都有空格 例如: 空格选项卡如果->选项卡如果 空格选项卡空格选项卡如果->选项卡选项卡如果 选项卡选项卡空格如果->选项卡选项卡如果 等等 它不应该影响第一个单词后面的任何内容,因此只会影响缩进:因此如果空格为布尔值,则制表符空格应更改为如果空格为布尔值,则制表符空格应更改为如果空格为布尔值,则制表符应更改为而不是如果空格为布尔值,则制表符应更改为 regex命令应该保留正确数量的选项卡,只需删除空格即可。如果一行中有

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

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

例如:

空格
选项卡
如果
->
选项卡
如果

空格
选项卡
空格
选项卡
如果
->
选项卡
选项卡
如果

选项卡
选项卡
空格
如果
->
选项卡
选项卡
如果

等等

它不应该影响第一个单词后面的任何内容,因此只会影响缩进:因此
如果空格为布尔值,则制表符空格应更改为
如果空格为布尔值,则制表符空格应更改为
如果空格为布尔值,则制表符应更改为
而不是
如果空格为布尔值,则制表符应更改为

regex命令应该保留正确数量的选项卡,只需删除空格即可。如果一行中有4个空格,则应将其转换为选项卡

谢谢你的帮助。如果你也能解释一下你的正则表达式是如何工作的,我将非常感激,因为我正在努力学习如何做我自己的正则表达式,而不是总是要求别人去做

如果你需要更多的信息或细节,请询问我会尽快回复


我可以在一次完成一个案例,如下所示:

对于空格优先:查找:
space*if
Replace:
if
这只适用于没有制表符的行,如果第一个单词是if,我将对该行的起始单词执行此操作

然后我将重复使用
空格*\t


看起来我可以通过执行
(?:[a-Za-z])
来匹配一个单词而无需捕获,因此我可以将
if
换成它,这样效果会更好。

你可以一步完成,但我更倾向于简单的方法

首先将4个空格转换为制表符。第一行是匹配,第二行是替换

^(\s*)[ ]{4}(\s*)
$1\t$2
然后将所有剩余的单个空格全部替换为零

^(\t*)[ ]+
$1
在这种情况下,您不需要方括号,但即使使用SO的代码格式,也很难确定是否有空格

第一行搜索行的开头,然后查找任意数量的空白(包括制表符),并将它们放入一个匹配组中,该组稍后命名为
$1
,其中包含
(\s*)
。中间正好有四个空格
[{4}
。最后一部分重复匹配组,以防该侧也有制表符或更多空格


因为第二个匹配应该查找所有剩余的空格,所以第二个匹配只查找0个或更多选项卡,将它们放入捕获组,然后查找剩余的空格。由于它会在执行过程中查找和替换,因此会占用所有空间并替换为选项卡。

您能将文档链接到此处吗?哪种文档?你是说文本文件吗?你自己做过任何努力吗?@FranklinSatler没有,但我可以创建一个示例,文件通常是如何附加的?@KenWhite是的,这是一个编程代码的文本文件(精确地说是pp)。是的,我可以这样做,但一次只能做一个案例,我这样做:查找:
space
替换:
sub
一个文档可能意味着很多事情(例如,Word.doc、Open Office文件、HTML文件等),其区别与您的问题极为相关。如果你指的是文本文件,就说文本文件。如果你自己已经努力解决了这个问题,那么在问题中说出来,这样它就不仅仅是一个问题,而是一个问题。为我写下解决方案,这样我就不必做任何事情了如果在空间之前有一个标签,这似乎不起作用?哇,它起作用了!你能解释一下它是如何工作的吗谢谢。如果只将所有空格与
\s*
匹配,那么
[]{4}
如何匹配任何内容?取决于您的解析器,它可能会匹配。N++不像sed那样贪婪,因此它通常在不指定匹配应该是最短的匹配的情况下工作。不过,你的直觉是对的。如果您想确保它匹配最小的空格数,直到正好4个空格,请将匹配组改为
(\s*?)
。答案绝对精彩!我只想强调,要转换所有空格,您应该重复“查找并替换”操作数次。