cerca numeri di ricerca contenenti un numero specifico di cifre


23

Devo trovare numeri di lunghezza specifici in un documento di grandi dimensioni. Ho provato a usare regex per questo. Ad esempio, se devo cercare numeri con esattamente 2 cifre, uso \d\d(ovvero due volte seguito da uno spazio). Funziona bene

Ma per trovare numeri di 10 cifre non è davvero possibile digitare \d10 volte.

Ho provato \d{2}, dice " E486: Pattern non trovato: \ d {2} "

Esiste un modo più rapido / semplice per raggiungere questo obiettivo?

Risposte:


32

Esistono diversi dialetti delle espressioni regolari; alcuni (ad es. Perl) non richiedono barre rovesciate nel modificatore di quantificazione ( \d{2}), alcuni (ad es. sed) richiedono due ( \d\{2\}), e in Vim ne ha bisogno solo il ricciolo di apertura ( \d\{2}). Questo è il triste stato dei dialetti delle espressioni regolari incompatibili.

Si noti inoltre che per la corrispondenza di numeri esatti , è necessario ancorare la corrispondenza in modo che \d\{2}non corrisponda alle cifre ( 12) in 123. Questo può essere fatto con look-behind negativo e look-ahead :

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

Perfezionare. Potete per favore informazioni di una riga sul regex? Sarebbe davvero utile. Grazie
mtk,

1
Per qualcuno alle prese con la sintassi regexp di base, look-behind / ahead è piuttosto avanzato. Probabilmente non posso descriverlo meglio di quello incorporato :help /\@<!e :help /\@!. Non preoccuparti se non capisci immediatamente tutto; come ho detto, questo è piuttosto avanzato.
Ingo Karkat,

Puoi anche mettere \vall'inizio del regex se vuoi evitare di dover sfuggire a {, vedi :help magicper maggiori informazioni (fa sì che vim regex si comporti un po 'più come perl regex, anche se ci sono ancora differenze).
evilsoup,

Grazie mille: \d\{4}a Vi è per niente banale
installero il

9

Prova quanto segue:

\d\{2}

e si dovrebbe utilizzare \non/

Puoi scoprire di più sulla normale eliminazione di vim su questo sito o vimcon :help regular.



1

Non così carino, ma questo ha funzionato per me per 5 cifre in un file di registro.

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

-1

Per qualcuno come me che raggiunge questa pagina semplicemente per cercare un modello che corrisponda a qualsiasi lunghezza di cifre:

\d\+

(Mi ci è voluto del tempo per capire la fuga extra obbligatoria prima di +)


+il quantificatore sta per 1 o più occorrenze. Questa espressione regolare corrisponde a 1 o più occorrenze di cifre.
gaganso,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.