VIM номера поиска, содержащие определенное количество цифр


23

Мне нужно найти цифры определенной длины в большом документе. Я пытался использовать регулярные выражения для этого. Например, если мне нужно искать номера с ровно 2 цифрами, я использую \d\d(то есть / d дважды с пробелом). Это хорошо работает.

Но для нахождения 10-значных чисел вводить \d10 раз не реально .

Пробовал \d{2}, говорит ' E486: шаблон не найден: \ d {2} '

Есть ли более быстрый / простой способ добиться этого?

Ответы:


32

Существуют разные диалекты регулярных выражений; некоторые (например, Perl) не требуют обратной косой черты в модификаторе квантификации ( \d{2}), некоторые (например, sed) требуют двух (\d\{2\} ), а в Vim это нужно только открытому фигурному символу ( \d\{2}). Это печальное состояние несовместимых диалектов регулярных выражений.

Также обратите внимание, что для сопоставления точных чисел необходимо закрепить совпадение, чтобы оно \d\{2}не совпадало с цифрами ( 12) в 123. Это может быть сделано с негативным прогнозом и прогнозом :

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

Отлично. Можете ли вы порадовать одним лайнером информацию о регулярном выражении? Было бы очень полезно. Спасибо
MTK

1
Для тех, кто борется с базовым синтаксисом регулярных выражений, просмотр вперед / назад довольно продвинут. Я, вероятно, не могу описать это лучше, чем встроенный :help /\@<!и :help /\@!. Не волнуйтесь, если не сразу все поймете; как я уже сказал, это довольно продвинутый.
Инго Каркат

Вы также можете поместить \vв начало регулярное выражение, если хотите избежать экранирования {, см. :help magicДополнительную информацию (это делает регулярное выражение vim немного более похожим на регулярное выражение perl, хотя есть и другие различия).
evilsoup

Большое спасибо: \d\{4}в Vi это вообще тривиально
installero

9

Попробуйте следующее:

\d\{2}

и вы должны использовать \ не/

Вы можете узнать больше о регулярном выражении vim на этом сайте или в vimс :help regular.



1

Не так красиво, но у меня получилось 5 цифр в лог-файле.

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

-1

Для таких, как я, попадающих на эту страницу просто для поиска шаблона, соответствующего любой длине цифр:

\d\+

(Мне потребовалось некоторое время, чтобы выяснить обязательное дополнительное экранирование \ перед +)


+квантификатор обозначает 1 или более вхождений. Это регулярное выражение соответствует 1 или более вхождению цифр.
Гагансо
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.