Saya mencoba membuat regex sederhana yang akan memeriksa apakah suatu baris kosong atau tidak.
Kasus;
" some" // not blank
" " //blank
"" // blank
Saya mencoba membuat regex sederhana yang akan memeriksa apakah suatu baris kosong atau tidak.
Kasus;
" some" // not blank
" " //blank
"" // blank
Jawaban:
Pola yang Anda inginkan adalah sesuatu seperti ini dalam mode multiline:
^\s*$
Penjelasan:
^ adalah awal dari anchor string.$ adalah akhir dari jangkar tali.\s adalah kelas karakter whitespace.* adalah pengulangan nol atau lebih dari.Dalam mode multiline, ^dan $juga cocok dengan awal dan akhir baris.
Anda juga dapat memeriksa apakah string yang diberikan line"kosong" (yaitu hanya berisi spasi putih) dengan trim()-ing, kemudian memeriksa apakah string yang dihasilkan isEmpty().
Di Jawa, ini akan menjadi seperti ini:
if (line.trim().isEmpty()) {
// line is "blank"
}
Solusi regex juga dapat disederhanakan tanpa jangkar (karena cara matchesdidefinisikan di Jawa) sebagai berikut:
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
truejika, dan hanya jika, length()adalah 0.boolean String.matches(String regex)
if line.strip(): karena sebuah string kosong dievaluasi menjadiFalse
Sebenarnya dalam mode multiline jawaban yang lebih benar adalah ini:
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Jawaban yang diterima: ^\s*$tidak cocok dengan skenario ketika baris terakhir kosong (dalam mode multiline).
Coba ini:
^\s*$
\sjuga cocok dengan jeda baris, sehingga Anda tidak akan "menemukan" satu baris kosong di dalam string yang berisi baris kosong berturut-turut.
Regex yang paling portabel adalah ^[ \t\n]*$untuk mencocokkan string kosong (perhatikan bahwa Anda perlu mengganti \tdan \ndengan tab dan baris baru yang sesuai) dan [^ \n\t]untuk mencocokkan string non-spasi putih.
[ \t]
\rsehingga regex akan ^[ \t\r\n]*$. Tetapi ^\s*$lebih baik - lebih ringkas. Jika Anda tidak ingin mencocokkan baris baru, Anda dapat menggunakan \h(artinya spasi putih horisontal) seperti di^\h*$
Penghargaan penuh untuk bchr02 untuk jawaban ini . Namun, saya harus memodifikasinya sedikit untuk menangkap skenario untuk baris yang */(akhir komentar) diikuti oleh baris kosong. Regex cocok dengan garis tidak kosong */.
Baru: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Yang saya lakukan adalah menambahkan ^karakter kedua untuk menandakan dimulainya baris.
Yah ... Saya bermain-main (menggunakan notepadd ++) dan ini adalah solusi yang saya temukan
\ n \ s
\ n untuk akhir baris (di mana Anda mulai mencocokkan) - tanda sisipan tidak akan membantu dalam kasus saya karena awal baris adalah string memerlukan ruang hingga string berikutnya
semoga membantu
test_vec <- c(" some"," ",""). solusi Anda: grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE, yang sebagai solusi: grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE. solusi yang dipilih memberikan hasil yang diharapkan, milik Anda tidak.
ctrl+fdi notepad ++? Dalam hal ini Anda dapat menemukan (meskipun tidak benar-benar cocok) baris kosong dengan memilih mode Pencarian "Extended" dan mencari '\ n \ s', jika Anda memilih "Ekspresi Reguler ', string Anda akan cocok dengan yang sama, dan Anda dapat juga coba solusi @polygenelubricants.Yang terakhir akan benar-benar cocok dengan garis, Anda dapat memeriksa dan melihat perbedaannya. Saya sarankan Anda mengedit jawaban Anda untuk lebih jelas tentang apa yang Anda sarankan, sehingga pembaca dapat mengambil lebih banyak nilai dari itu.