vim 搜索包含特定位数的数字

vim 搜索包含特定位数的数字

我需要在大文档中找到特定的长度数字。我尝试为此使用正则表达式。例如,如果我需要搜索正好 2 位数字的数字,我会使用\d\d(即 /d 两次,后跟一个空格)。这效果很好。

但要查找 10 位数字,输入\d10 次实际上是不可行的。

试过了\d{2},说'E486: 未找到模式: \d{2}'

有没有更快/更简单的方法来实现这一目标?

答案1

有不同的正则表达式方言;有些(例如 Perl 的)不需要反斜杠量化修饰符( \d{2}),有些(例如 sed)需要两个 ( \d\{2\}),而在 Vim 中,只有开头花句需要它 ( \d\{2})。这就是正则表达式方言不兼容的可悲状态。

另请注意,为了匹配精确的数字,您必须锚定匹配,以便\d\{2}不会与12中的数字 ( )匹配123。这可以通过以下方式完成消极向后看展望:

\d\@<!\d\{2}\d\@!

答案2

请尝试以下操作:

\d\{2}

\不应该使用/

您可以在此处找到有关 vim 正则表达式的更多信息地点vim:help regular.

答案3

转义括号的工作原理:\d\{2\}

答案4

搜索固定长度的数字例如 5

/\d\{5\}

匹配 12345, 123456

由于超过5位的数字包含5位的子串,因此也会被找到。

字边界开始

\<

字边界结束

\>

然后使用下面的方法来搜索精确的 5 位数字

/\<\d\{5\}\>

匹配 12345 但不匹配 123456

使用以下搜索 5 位或更多位的数字。

/\<\d\{5,\}\>

使用以下搜索 5 至 8 位数字。

/\<\d\{5,8\}\>

使用以下命令搜索 8 位或更少的数字。

/\<\d\{,8\}\>

1 位或多位数字的快捷号码

/\d\+

相关内容