numéros de recherche vim contenant un nombre spécifique de chiffres


23

J'ai besoin de trouver des numéros de longueur spécifiques dans un gros document. J'ai essayé d'utiliser l'expression régulière pour cela. Par exemple, si je dois rechercher des nombres avec exactement 2 chiffres, j'utilise \d\d(ie / d deux fois suivi d'un espace). Cela fonctionne bien.

Mais pour trouver des nombres à 10 chiffres, il n'est pas vraiment possible de taper \d10 fois.

Essayé \d{2}, dit ' E486: motif introuvable: \ d {2} '

Existe-t-il un moyen plus rapide / plus simple d'y parvenir?

Réponses:


32

Il existe différents dialectes d'expression régulière; certains (par exemple Perl) ne nécessitent pas de barres obliques inverses dans le modificateur de quantification ( \d{2}), certains (par exemple sed) nécessitent deux ( \d\{2\}), et dans Vim, seule l'ouverture bouclée en a besoin ( \d\{2}). C'est le triste état des dialectes d'expression régulière incompatibles.

Notez également que pour faire correspondre des nombres exacts , vous devez ancrer la correspondance afin qu'elle \d\{2}ne corresponde pas aux chiffres ( 12) de 123. Cela peut être fait avec un regard négatif et un regard en avant :

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

Parfait. Pouvez-vous s'il vous plaît une seule information sur le regex? Serait vraiment utile. Merci
mtk

1
Pour quelqu'un qui a du mal avec la syntaxe de l'expression rationnelle de base, le look-behind / ahead est assez avancé. Je ne peux probablement pas le décrire mieux que le intégré :help /\@<!et :help /\@!. Ne vous inquiétez pas si vous ne comprenez pas tout de suite; comme je l'ai dit, c'est assez avancé.
Ingo Karkat du

Vous pouvez également mettre \vau début de l'expression rationnelle si vous souhaitez éviter d'avoir à échapper à la {, voir :help magicpour plus d'informations (cela fait que vge regex se comporte un peu plus comme perl regex, bien qu'il y ait encore des différences).
evilsoup

Merci beaucoup: \d\{4}à Vi c'est un peu banal
installero

9

Essayez ce qui suit:

\d\{2}

et vous ne devez \pas utiliser/

Vous pouvez en savoir plus sur l'expression régulière de vim sur ce site ou vimavec :help regular.



1

Pas aussi joli, mais cela a fonctionné pour moi à 5 chiffres dans un fichier journal.

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

-1

Pour quelqu'un comme moi qui atteint cette page simplement pour chercher un motif correspondant à n'importe quelle longueur de chiffres:

\d\+

(Il m'a fallu un certain temps pour comprendre l'échappement supplémentaire obligatoire \ avant +)


+quantificateur signifie 1 occurrence ou plus. Cette expression régulière correspond à une ou plusieurs occurrences de chiffres.
gaganso
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.