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?

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\@!

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.



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\)\>

-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 +)


+quantificador significa 1 ou mais ocorrências. Essa expressão regular corresponde a 1 ou mais ocorrências de dígitos.
Gaganso
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.