números de pesquisa vim contendo número específico de dígitos

23

Preciso encontrar números de comprimento específicos em um grande documento. Eu tentei usar regex para isso. Por exemplo, se eu precisar procurar números com exatamente 2 dígitos, eu uso \d\d( por exemplo, / d duas vezes seguidas por um espaço). Isso funciona bem.

Mas, para encontrar números de 10 dígitos, não é realmente possível digitar \d10 vezes.

Tentei \d{2}, diz ' E486: padrão não encontrado: \ d {2} '

Existe alguma maneira mais rápida / fácil de conseguir isso?

mtk
fonte

Respostas:

32

Existem diferentes dialetos de expressão regular; alguns (por exemplo, do Perl) não exigem barras invertidas no modificador de quantificação ( \d{2}), outros (por exemplo, sed) requerem dois ( \d\{2\}) e no Vim, apenas a abertura do cachecol precisa dele ( \d\{2}). Esse é o triste estado de dialetos incompatíveis de expressão regular.

Observe também que, para corresponder números exatos , você deve ancorar a correspondência para que \d\{2}não corresponda aos dígitos ( 12) 123. Isso pode ser feito com olhar para trás e para frente :

\d\@<!\d\{2}\d\@!
Ingo Karkat
fonte
Perfeito. Você pode agradar uma informação de linha no regex? Seria realmente útil. Graças
mtk
1
Para alguém que luta com a sintaxe básica do regexp, o look-behind / ahead é bastante avançado. Provavelmente não posso descrevê-lo melhor do que o built-in :help /\@<!e :help /\@!. Não se preocupe se você não entender tudo imediatamente; como eu disse, isso é bastante avançado.
Ingo Karkat 12/09
Você também pode colocar \vno início da regex se quiser evitar ter que escapar da {, consulte :help magicpara obter mais informações (isso faz com que o vim regex se comporte um pouco mais como o perl regex, embora ainda haja diferenças).
evilsoup
Muito obrigado: \d\{4}no Vi, é trivial
installero
9

Tente o seguinte:

\d\{2}

e você \não deve usar/

Você pode descobrir mais sobre o desgaste regular do vim neste site ou vimcom :help regular.

Raphael Ahrens
fonte
2

Funcionamento de colchetes de escape: \d\{2\}

one_half_3544
fonte
1

Não é tão bonito, mas isso funcionou para mim por 5 dígitos em um arquivo de log.

/\<\%(\d\d\d\d\d\)\>
theINtoy
fonte
-1

Para alguém como eu, acessando esta página, basta procurar um padrão que corresponda a qualquer comprimento de dígitos:

\d\+

(Levei algum tempo para descobrir o escape extra obrigatório \ antes de +)

Kevin Liu
fonte
+quantificador significa 1 ou mais ocorrências. Essa expressão regular corresponde a 1 ou mais ocorrências de dígitos.
Gaganso