vim números de búsqueda que contienen un número específico de dígitos

23

Necesito encontrar números de longitud específicos en un documento grande. Traté de usar expresiones regulares para esto. Por ejemplo, si necesito buscar números con exactamente 2 dígitos, lo uso \d\d(es decir, / d dos veces seguido de un espacio). Esto funciona bien

Pero para encontrar números de 10 dígitos no es realmente posible escribir \d10 veces.

Intentado \d{2}, dice ' E486: Patrón no encontrado: \ d {2} '

¿Hay alguna forma más rápida / fácil de lograr esto?

mtk
fuente

Respuestas:

32

Hay diferentes dialectos de expresión regular; algunos (por ejemplo, Perl) no requieren barras invertidas en el modificador de cuantificación ( \d{2}), algunos (por ejemplo, sed) requieren dos ( \d\{2\}), y en Vim, solo el rizado de apertura lo necesita ( \d\{2}). Ese es el triste estado de los dialectos de expresión regular incompatibles.

También tenga en cuenta que para hacer coincidir números exactos , debe anclar la coincidencia para que \d\{2}no coincida con los dígitos ( 12) 123. Esto se puede hacer con mirar hacia atrás y mirar hacia adelante negativos :

\d\@<!\d\{2}\d\@!
Ingo Karkat
fuente
Perfecto. ¿Puedes por favor una información de línea en la expresión regular? Sería realmente útil Gracias
mtk
1
Para alguien que lucha con la sintaxis básica de expresiones regulares, mirar hacia atrás / adelante es bastante avanzado. Probablemente no pueda describirlo mejor que el incorporado :help /\@<!y :help /\@!. No se preocupe si no comprende todo de inmediato; como dije, esto es bastante avanzado.
Ingo Karkat
También puede colocarlo \val comienzo de la expresión regular si desea evitar tener que escapar {, consulte :help magicpara obtener más información (hace que vim regex se comporte un poco más como perl regex, aunque todavía hay diferencias).
evilsoup
Muchas gracias: \d\{4}en Vi es trivial
installero
9

Intenta lo siguiente:

\d\{2}

y se debe utilizar \no/

Puede obtener más información sobre la expresión regular de vim en este sitio o vimcon :help regular.

Raphael Ahrens
fuente
2

Los corchetes de escape funcionan: \d\{2\}

one_half_3544
fuente
1

No es tan bonito, pero esto funcionó para mí durante 5 dígitos en un archivo de registro.

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

Para alguien como yo que llega a esta página simplemente para buscar un patrón que coincida con cualquier longitud de dígitos:

\d\+

(Me tomó algún tiempo descubrir el escape adicional obligatorio \ antes +)

Kevin Liu
fuente
+cuantificador significa 1 o más ocurrencias. Esta expresión regular coincide con 1 o más ocurrencias de dígitos.
gaganso