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

16

Eu preciso encontrar números de tamanho específicos em um documento grande. Eu tentei usar o regex para isso. Por exemplo, se eu precisar pesquisar números com exatamente 2 dígitos, use \d\d (ou seja, / d duas vezes seguidos por um espaço). Isso funciona bem.

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

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

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

    
por mtk 12.09.2013 / 09:42

5 respostas

24

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

Além disso, observe que, para corresponder a números exatos , você precisa ancorar a correspondência para que \d\{2} não corresponda aos dígitos ( \d\{2} ) em 12 . Isso pode ser feito com look-behind negativo e em frente :

\d\@<!\d\{2}\d\@!
    
por 12.09.2013 / 10:00
6

Tente o seguinte:

\d\{2}

e você deve usar \ não /

Você pode descobrir mais sobre a regularização do vim neste site ou em vim com :help regular .

    
por 12.09.2013 / 09:47
1

Os parênteses de escape funcionam: \d\{2\}

    
por 12.09.2013 / 09:45
1

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

/\<\%(\d\d\d\d\d\)\>
    
por 29.05.2014 / 15:06
-1

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

\d\+

(Demorei um pouco para descobrir o escape extra obrigatório \ before +)

    
por 31.01.2018 / 04:20