假设你有一些看起来像这样的线条
1 int some_function() {
2 int x = 3; // Some silly comment
Run Code Online (Sandbox Code Playgroud)
等等.缩进用空格完成,每个缩进是两个空格.
您希望将每个缩进更改为三个空格.简单的正则表达式
s/ {2}/ /g
Run Code Online (Sandbox Code Playgroud)
不适合你,因为这会改变一些非缩进空格; 在这种情况下,它将两个空格改变// Some silly comment为三个空格,这是不希望的.(如果在行的后端对齐表或注释,则会变得更糟.)
你不能简单地使用
/^( {2})+/
Run Code Online (Sandbox Code Playgroud)
因为什么会替换它?我不知道一个简单的方法来找出+在正则表达式中匹配的次数,因此我们不知道要插入多少次更改的缩进.
你总是可以一行一行地切断缩进,测量它们,构建一个新的缩进字符串,然后将它固定在线上,但是如果有一个正则表达式那就太简单了哦.
是否有正则表达式来替换上面描述的缩进级别?
Joh*_*rak 10
在一些正则表达式中,您可以使用lookbehind:
s/(?<=^ *) / /g
Run Code Online (Sandbox Code Playgroud)
在所有其他风格中,您可以反转字符串,使用前瞻(所有风格支持)并再次反转:
s/ (?= *$)/ /g
Run Code Online (Sandbox Code Playgroud)
这里的一个又一个,而不是利用\G其具有NET,PCRE(C,PHP,R ...),Java和Perl和Ruby的支持:
s/(^|\G) {2}/ /g
Run Code Online (Sandbox Code Playgroud)
\G[...]可以在以下两个位置之一匹配:
✽字符串的开头
,immediately紧接上一个匹配结束的位置.
资料来源:http://www.rexegg.com/regex-anchors.html#G
我们利用它的能力匹配紧接在前一个匹配结束之后的位置,在这种情况下将在一行的开头,然后是2个空格(或者在上述规则之后的前一个匹配).
请参阅示例:https://regex101.com/r/qY6dS0/1
我需要将缩进空间减少一半。也就是说,如果缩进为4个空格,则需要将其更改为2个空格。我无法提出正则表达式。但是,值得庆幸的是,其他人做到了:
//search for
^( +)\1
//replace with (or \1, in some programs, like geany)
$1
Run Code Online (Sandbox Code Playgroud)
来自源:“ ^( +)\1表示”行首的任何非零长度的空格序列,后跟相同的空格序列。的\1图案中的,并且$1在替换,都是空格的初始序列的两个反向引用。结果:缩进减半。”
| 归档时间: |
|
| 查看次数: |
3173 次 |
| 最近记录: |