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*?)
。答案绝对精彩!我只想强调,要转换所有空格,您应该重复“查找并替换”操作数次。