Bagaimana mencari kemunculan lebih dari satu spasi antar kata dalam satu baris
1. this is a line containing 2 spaces
2. this is a line containing 3 spaces
3. this is a line containing multiple spaces first second three four
Semua hal di atas adalah kecocokan valid untuk regex ini. Regex apa yang harus saya gunakan?
Jawaban:
SPACE (2 atau lebih)
Anda juga bisa memeriksanya sebelum dan sesudah spasi kata-kata mengikuti. (bukan spasi lain seperti tab atau baris baru)
sama, tetapi Anda juga dapat memilih (menangkap) hanya spasi untuk tugas-tugas seperti penggantian
atau lihat bahwa sebelum dan sesudah spasi ada apa saja, tidak hanya karakter kata (kecuali spasi)
sumber
\w
berarti 'karakter kata', yaitu alfanumerik dan garis bawah, tetapi bukan karakter bukan spasi lainnya. Untuk memeriksa non-spasi, gunakan\S
(kapital S). Juga, yang pertama hanya akan cocok dengan baris yang berisi dua atau lebih spasi dan tidak ada yang lain.\S
, saya hanya memilih untuk tidak mengandalkan kapitalisasi karakter untuk fungsionalitas seperti itu, lebih mudah dibaca.\w[ ]{2,}\w
akan gagal untuk mencocokkanword.<2 spaces>more words
atau string yang seluruhnya terdiri dari spasi.[^\s]([ ]{2,})[^\s]\w
akan gagal pada baris yang dimulai dengan spasi atau string sepertibla<2 spaces>.
...Solusi sederhana:
Ini cocok dengan semua kemunculan dari satu atau lebih karakter spasi. Jika Anda perlu mencocokkan seluruh baris, tetapi hanya jika berisi dua atau lebih karakter spasi kosong yang berurutan:
Jika spasi putih tidak harus berurutan:
sumber
.*
biasanya serakah, artinya itu akan mencapai akhir string yang diuji, dan semua yang mengikuti, jika ada karakter wajib, tidak akan cocok. Biasanya dalam hal ini adalah praktik yang baik untuk menambahkan?
, seperti ini.*?
. Itu terjadi pada saya menggunakan PCRE PHP/^.*b.*$/
sebenarnya cocok"foobar"
, meskipun Anda sudah mengharapkan serakah pertama.*
untuk mencocokkan seluruh string.Regex ini memilih semua spasi, Anda dapat menggunakan ini dan menggantinya dengan satu spasi
contoh di python
sumber
Cari
[ ]{2,}
. Ini akan menemukan dua atau lebih ruang yang berdekatan di manapun dalam garis. Ini juga akan mencocokkan spasi di depan dan di belakang serta garis yang seluruhnya terdiri dari spasi. Jika Anda tidak menginginkannya, lihat jawaban Alexander.Sebenarnya, Anda dapat mengabaikan tanda kurung, ini hanya untuk kejelasan (jika tidak, karakter spasi yang diulang tidak terlalu terlihat :)).
Masalahnya
\s{2,}
adalah bahwa itu juga akan cocok dengan baris baru pada file Windows (di mana baris baru dilambangkan denganCRLF
atau\r\n
yang dicocokkan dengan\s{2}
.Jika Anda juga ingin menemukan banyak tab dan spasi, gunakan
[ \t]{2,}
.sumber
more than one space between words in a line
. Bagaimana[ ]{2,}
antar kata? Apakah Anda sudah membaca pertanyaannya?Inilah solusi saya
Ini akan menghapus semua digit, koma dan baris baru tetapi memilih ruang tengah seperti kumpulan data
sumber