Regex untuk mencocokkan lebih dari 2 spasi tetapi bukan baris baru

90

Saya ingin mengganti semua lebih dari 2 spasi putih dalam string tetapi bukan baris baru, saya memiliki regex ini: \s{2,}tetapi juga cocok dengan baris baru.

Bagaimana cara mencocokkan 2 atau lebih spasi putih saja dan bukan baris baru?

Saya menggunakan c #

Bruno
sumber
@nihcap - Sebenarnya, C # tidak memiliki rasa regex sendiri, ini adalah bagian dari pustaka umum .Net. Dalam hal ini, .Net dan C # adalah tag yang berguna.
Kobi

Jawaban:

164

Letakkan karakter spasi putih yang ingin Anda cocokkan di dalam kelas karakter. Sebagai contoh:

[ \t]{2,}

cocok dengan 2 atau lebih spasi atau tab.

Anda juga bisa melakukan:

[^\S\r\n]{2,}

yang cocok dengan karakter spasi kosong apa pun kecuali \rdan \nsetidaknya dua kali (perhatikan bahwa huruf besar Sdalam \Sadalah kependekan dari [^\s]).

Bart Kiers
sumber
Apa yang Anda maksud dengan "kependekan" di kalimat terakhir Anda? Akan seperti apa seluruh ekspresi reguler tanpa singkatan ini?
Lonnie Terbaik
5
@LonnieBest dalam ekspresi reguler, untuk urutan escape seperti \ w, sering kali merupakan konvensi bahwa urutan escape huruf besar adalah kumpulan karakter terbalik dari urutan escape huruf kecil. Misalnya \ d adalah kebalikan dari \ D, \ s adalah kebalikan dari \ S, \ w adalah kebalikan dari \ W, dll. Dan juga, dalam himpunan kelas karakter yang dibatasi oleh [] seperti [abc], dimungkinkan untuk menentukan terbalik menggunakan [^ abc]. Jadi, \ S setara dengan [^ \ s], yang juga akan setara dengan notasi yang tidak diizinkan [^^ \ S], jika diizinkan. (^^ bukanlah cara yang valid untuk merepresentasikan kebalikan dari sebuah invers.)
Dejay Clayton
@DejayClayton Terima kasih, saya tidak tahu itu.
Lonnie Best
Jawaban ini berhasil, tetapi mengapa \s{2,}ambil baris baru yang melanjutkannya? Jika itu \n\s{2,}saya mengerti. Dan mengapa mengetik spasi literal dalam tanda kurung bekerja?
sedikit-kurang
"Jawaban ini berhasil, tetapi mengapa \ s {2,} mengambil baris baru yang melanjutkannya?" karena \scocok dengan spasi, tab, dan jeda baris. "Dan mengapa mengetik spasi literal dalam tanda kurung bekerja?", Yah, salah, karena memang begitu. Tidak tahu harus berkata apa lagi tentang itu :)
Bart Kiers
0

Ekspresi reguler untuk menargetkan hanya dua spasi: [] {2,} Tanda kurung dalam ekspresi reguler adalah kelas karakter. Artinya hanya karakter di sana. Di sini hanya ruang. Tanda kurung kurawal berikut artinya dua kali atau lebih.

Johan
sumber