vim搜索编号包含特定位数


23

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

但是要找到10位数字,实际上不可能输入\d10次​​。

尝试过\d{2},说“ E486:找不到模式:\ d {2}

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

Answers:


32

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

另请注意,要匹配精确的数字,您必须锚定匹配项,以使其\d\{2}与中的数字(12)不匹配123。这可以通过负向后看超前来完成

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

完善。您能在正则表达式上取一个衬垫信息吗?真的很有帮助。谢谢
mtk

1
对于那些使用基本regexp语法的人来说,“后向/向前”功能相当先进。我可能无法比内置:help /\@<!和更好地描述它:help /\@!。如果您不立即了解所有内容,请不要担心。如我所说,这是相当先进的。
Ingo Karkat 2013年

\v如果希望避免不得不转义{,也可以在regex的开头放置,请参阅:help magic参考资料(更多信息使vim regex的行为更像perl regex,尽管仍然有所不同)。
evilsoup

非常感谢:\d\{4}在Vi中,这简直是微不足道
installero



1

不太漂亮,但这在日志文件中对我有效了5位。

/\<\%(\d\d\d\d\d\)\>

-1

对于像我这样的人,访问此页面仅是寻找与任意长度的数字匹配的模式:

\d\+

(花了一些时间我才想出+之前必须强制转义\)


+量词代表1次或多次出现。此正则表达式匹配1个或多个出现的数字。
gaganso
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.