vim nomor pencarian yang mengandung jumlah digit tertentu


23

Saya perlu menemukan nomor panjang tertentu dalam dokumen besar. Saya mencoba menggunakan regex untuk ini. Sebagai contoh, Jika saya perlu mencari angka dengan tepat 2 digit, saya menggunakan \d\d(yaitu / d dua kali diikuti oleh spasi). Ini bekerja dengan baik.

Tetapi untuk menemukan 10 angka angka itu tidak benar-benar layak untuk mengetik \d10 kali.

Sudah dicoba \d{2}, kata ' E486: Pola tidak ditemukan: \ d {2} '

Apakah ada cara yang lebih cepat / mudah untuk mencapai ini?

Jawaban:


32

Ada berbagai dialek ekspresi reguler; beberapa (misalnya Perl) tidak memerlukan garis miring terbalik pada pengubah kuantifikasi ( \d{2}), beberapa (misalnya sed) memerlukan dua ( \d\{2\}), dan dalam Vim, hanya keriting pembuka yang membutuhkannya ( \d\{2}). Itulah keadaan menyedihkan dari dialek ekspresi reguler yang tidak kompatibel.

Perhatikan juga bahwa untuk mencocokkan angka yang tepat , Anda harus memasang jangkar pertandingan agar \d\{2}tidak cocok dengan angka ( 12) di 123. Ini dapat dilakukan dengan pandangan negatif ke belakang dan pandangan ke depan :

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

Sempurna. Bisakah Anda tolong satu info liner di regex? Akan sangat membantu. Terima kasih
mtk

1
Untuk seseorang yang berjuang dengan sintaksis regexp dasar, melihat-belakang / ke depan cukup maju. Saya mungkin tidak bisa menggambarkannya lebih baik daripada built-in :help /\@<!dan :help /\@!. Jangan khawatir jika Anda tidak segera memahami segalanya; seperti yang saya katakan, ini cukup maju.
Ingo Karkat

Anda juga dapat meletakkan \vdi awal regex jika Anda ingin menghindari keharusan melarikan diri {, lihat :help magicuntuk informasi lebih lanjut (itu membuat vim regex berperilaku sedikit lebih seperti perl regex, meskipun masih ada perbedaan).
evilsoup

Terima kasih banyak: \d\{4}di Vi itu sepele sekali
installero

9

Coba yang berikut ini:

\d\{2}

dan Anda sebaiknya \tidak menggunakannya/

Anda dapat mengetahui lebih lanjut tentang penekanan vim reguler di situs ini atau vimbersama :help regular.



1

Tidak secantik itu, tetapi ini berhasil bagi saya selama 5 digit dalam file log.

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

-1

Untuk seseorang seperti saya mencapai halaman ini hanya untuk mencari pola yang cocok dengan angka berapa pun :

\d\+

(Butuh beberapa waktu untuk mencari tahu pelarian ekstra wajib \ sebelum +)


+quantifier adalah singkatan dari 1 kejadian atau lebih. Ekspresi reguler ini cocok dengan 1 atau lebih kemunculan digit.
gaganso
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.