Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
使用vim regexp清除文件中的前导零_Regex_Vim - Fatal编程技术网

使用vim regexp清除文件中的前导零

使用vim regexp清除文件中的前导零,regex,vim,Regex,Vim,我有一个包含16位十六进制数的文件。数字类似于0000、fa01、00f10001等。我想删除前导的0,这样我只剩下一些数字,例如0000应该更改为just0,0001应该更改为1,而0应该保持不变 我正在尝试使用这样的regexp%s/^0\+\(0$\)\@//。如果有这样的数字000,则保留一行空白。有没有关于如何修复此问题的建议?可能是这样的: :0,$ s/0\+\([0-9a-f]\)/\1/ 任意数量的零,但至少保留一个数字。。。如果没有g标志,它最多每行执行一次 当然,如果十六

我有一个包含16位十六进制数的文件。数字类似于
0000、fa01、00f10001
等。我想删除前导的0,这样我只剩下一些数字,例如
0000
应该更改为just
0
0001
应该更改为
1
,而
0
应该保持不变


我正在尝试使用这样的regexp
%s/^0\+\(0$\)\@//。如果有这样的数字
000
,则保留一行空白。有没有关于如何修复此问题的建议?

可能是这样的:

:0,$ s/0\+\([0-9a-f]\)/\1/
任意数量的零,但至少保留一个数字。。。如果没有
g
标志,它最多每行执行一次

当然,如果十六进制中有大写字母,也可以使用A-F


更新:

\(0$\)\@表示匹配行上的最后一个零,然后将其否定,使其为false(希望如此)


但是,仔细观察表达式,
0\+
中取零,然后
0$
返回false,
\@否定了这一点!因此,这是一场比赛。因此,我认为您的表达式工作正常,除了所有零表达式。

您提供的解决方案工作正常。谢谢顺便问一下,你能告诉我为什么我以前使用的regexp是
%s/^0\+\(0$\)\@//不工作?