Ekspresi reguler: temukan spasi (tab / spasi) tetapi bukan baris baru

97

Bagaimana saya bisa memiliki ekspresi reguler yang menguji spasi atau tab tetapi tidak untuk baris baru. Saya mencoba \stetapi ternyata tes untuk baris baru juga.

Saya menggunakan C # / WPF tetapi tidak masalah.

Jiew Meng
sumber

Jawaban:

190

Gunakan kelas karakter: [ \t]

Lekensteyn
sumber
1
Tepat untuk masalah saya. Lihat juga stackoverflow.com/a/25956935/292060 untuk \hkelas karakter khusus perl , tetapi ini menunjukkan ada banyak karakter spasi putih lainnya, jika Anda perlu menambahkannya ke daftar di sini.
goodeye
3
kenapa harus ada spasi sebelumnya \t?
Ooker
4
@Ooker Untuk menangkap ruang literal
codemonkee
Ini tidak akan cocok dengan jenis ruang lain, seperti yang telah disebutkan oleh jawaban lain.
Gus
1
Mengapa spasi sebelumnya \ t?
Catbuilts
35

Coba set karakter ini:

[ \t]

Ini hanya cocok dengan spasi atau tabulator.

Gumbo
sumber
14

Seperti yang dicatat oleh @ Eiríkr Útlendi, solusi yang diterima hanya mempertimbangkan dua karakter spasi: tab horizontal (U + 0009), dan spasi putus (U + 0020). Itu tidak mempertimbangkan karakter spasi putih lainnya seperti spasi non-breaking (yang kebetulan ada dalam teks yang saya coba tangani). Daftar karakter spasi kosong yang lebih lengkap disertakan di Wikipedia dan juga direferensikan dalam jawaban Perl terkait . Solusi C # sederhana yang memperhitungkan karakter lain ini dapat dibangun menggunakan pengurangan kelas karakter

[\s-[\r\n]]

atau, termasuk solusi Eiríkr Útlendi, Anda mengerti

[\s\u3000-[\r\n]]
erdomke
sumber
3

Catatan: Untuk mereka yang berurusan dengan teks CJK (Cina, Jepang, dan Korea), spasi double-byte (Unicode \u3000) tidak disertakan dalam \simplementasi yang saya coba sejauh ini (Perl, .NET, PCRE, Python). Anda harus menormalkan string Anda terlebih dahulu (seperti mengganti semua \u3000dengan \u0020), atau Anda harus menggunakan kumpulan karakter yang menyertakan titik kode ini selain spasi kosong lain yang Anda targetkan, seperti [ \t\u3000].

Jika Anda menggunakan Perl atau PCRE, Anda memiliki opsi untuk menggunakan \hsingkatan untuk spasi horizontal , yang tampaknya menyertakan spasi byte tunggal, spasi byte ganda, dan tab, antara lain. Lihat thread Match whitespace tapi bukan newlines (Perl) untuk detail lebih lanjut.

Namun, \hsingkatan ini belum diterapkan untuk .NET dan C #, sebaik yang bisa saya katakan.

Eiríkr Útlendi
sumber
1
Poin yang bagus. Java \h(diperkenalkan di Java 8) memang termasuk \u3000, tetapi \stidak, kecuali Anda menyetel mode UNICODE_CHARACTER_CLASS (diperkenalkan di Java 7).
Alan Moore
0

Jika Anda ingin mengganti spasi di bawah kode bekerja untuk saya diC#

Regex.Replace(Line,"\\\s","");

Untuk Tab

Regex.Replace(Line,"\\\s\\\s","");

Sameer Bahad
sumber