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.
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.
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
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.
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#
\h
kelas karakter khusus perl , tetapi ini menunjukkan ada banyak karakter spasi putih lainnya, jika Anda perlu menambahkannya ke daftar di sini.\t
?Coba set karakter ini:
Ini hanya cocok dengan spasi atau tabulator.
sumber
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
atau, termasuk solusi Eiríkr Útlendi, Anda mengerti
sumber
Catatan: Untuk mereka yang berurusan dengan teks CJK (Cina, Jepang, dan Korea), spasi double-byte (Unicode
\u3000
) tidak disertakan dalam\s
implementasi yang saya coba sejauh ini (Perl, .NET, PCRE, Python). Anda harus menormalkan string Anda terlebih dahulu (seperti mengganti semua\u3000
dengan\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
\h
singkatan 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,
\h
singkatan ini belum diterapkan untuk .NET dan C #, sebaik yang bisa saya katakan.sumber
\h
(diperkenalkan di Java 8) memang termasuk\u3000
, tetapi\s
tidak, kecuali Anda menyetel mode UNICODE_CHARACTER_CLASS (diperkenalkan di Java 7).Jika Anda ingin mengganti spasi di bawah kode bekerja untuk saya di
C#
Regex.Replace(Line,"\\\s","");
Untuk Tab
Regex.Replace(Line,"\\\s\\\s","");
sumber