Normal ifade kullanarak bir satırın boş olup olmadığı nasıl kontrol edilir


154

Bir satır boş olup olmadığını kontrol edecek basit regex yapmaya çalışıyorum.

Durum;

"    some"   // not blank
"   " //blank
"" // blank

Burada Boş, ne demek istediğini ifade eder. Beyaz boşluklarla dolu bir çizgi veya hiçbir şey içermeyen bir çizgi. Hiçbir şey içermeyen bir satırı eşleştirmek istiyorsanız '/ ^ $ /' kullanın
Badri Gs

Yanıtlar:


329

İstediğiniz desen çok satırlı modda şöyle bir şeydir:

^\s*$

Açıklama:

  • ^ dize çapasının başlangıcıdır.
  • $ dize çapasının sonu.
  • \s boşluk karakter sınıfıdır.
  • * , sıfır veya daha fazla tekrarıdır.

Çok satırlı modda ^ve $aynı zamanda satırın başlangıcı ve bitişi ile eşleşir.

Referanslar:


Normal olmayan bir alternatif:

Ayrıca, verilen bir dizenin line"boş" (yani yalnızca boşluk içeren) trim()olup olmadığını ve ardından dize olup olmadığını kontrol edebilirsiniz isEmpty().

Java'da bu şöyle bir şey olurdu:

if (line.trim().isEmpty()) {
    // line is "blank"
}

Normal ifade çözümü, bağlantısız olarak ( matchesJava'da nasıl tanımlandığından dolayı ) aşağıdaki gibi basitleştirilebilir :

if (line.matches("\\s*")) {
    // line is "blank"
}

API referansları


1
@Adnan: Bart'ın Marcelo'nun cevabındaki yorumunu not edin; birden çok boş satırı nasıl işlemek istediğinize bağlı olarak, desen biraz değişebilir.
poligeno

Eh, Java, bir satır satır bir dosya okuyorum, bu yüzden bu iyi olacağını varsayalım.
Adnan

1
line.tr ile mükemmel görünüyor: D
Adnan

1
mükemmel kodları şimdi 1.6sn> 1sec yürütür Teşekkür ederiz.
Adnan

Python: if line.strip(): boş bir dize değerlendirir beri hiçFalse
John Mark

58

Aslında çok satırlı modda daha doğru bir cevap şudur:

/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

Kabul edilen cevap: ^\s*$son satır boş olduğunda (çok satırlı modda) bir senaryo ile eşleşmez.


Kesinlikle, ve ben böyle olduğunu doğruladım. Kabul edilen cevap dosyamdaki birçok boş satırı kaçırdı, ancak bu hepsini yakaladı. Her iki normalin birleşmesi her durumu yakalar.
elmor

1
Bu cevap Notepad ++ gibi bir araçta mükemmel çalıştı. Kabul edilen cevap, birden fazla boş satırla eşleşti, ancak tek boş satırla eşleşmedi.
james

Benim durumumda, kabul edilen cevap Sublime Text 3'te çalışmıyor ve bu işe yarıyor.
yangsibai

1
Kabul edilen cevap benim durumumda işe yaradı, çok satırlı. Bu yapar.
Robert Gabriel

1
bu en iyi cevap olmalı.
Q i

12

Bunu dene:

^\s*$

5
@Adnan, \ssatır sonlarıyla da eşleştiğini unutmayın , bu nedenle art arda boş satırlar içeren bir dize içinde tek bir boş satır "bulamazsınız".
Bart Kiers

6

En taşınabilir regex olacağını ^[ \t\n]*$(Değiştirmeye gerek olacağını not boş bir dize maç için \tve \nbuna göre sekmesi ve yeni satır ile) ve [^ \n\t]bir boşluk olmayan dize eşleşecek.


En azından sınıfla tek bir alanı değiştirirdim[ \t]
Bart Kiers

1
Windows'da \rnormal ifadenin olması için satır başı karakterini de dikkate almanız gerekir ^[ \t\r\n]*$. Ama ^\s*$daha iyi - daha özlü. Yeni satırlarla eşleşmek istemiyorsanız, \h(yatay boşluk anlamına gelir)^\h*$
ps.pf

5

Bu cevap için bchr02'ye tam kredi . Ancak, boş bir satır (yorum sonu) olan satırlar için senaryo yakalamak için biraz değiştirmek zorunda kaldı . Normal ifade boş olmayan satırla eşleşiyordu .*/*/

Yeni: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

Tek yaptığım ^satırın başlangıcını göstermek için ikinci karakter olarak eklemek .


Neden bchr02'nin cevabı hakkında yorum yapmıyor ve cevabındaki gelişmeyi önermiyorsunuz?
adamlogan

1
@adamlogan evet, bellekten, sanırım o zaman yapmak istedim, ama başka birinin yazı hakkında yorum yapmak için yeterli bir üne sahip değildi, bu yüzden böyle yapmak zorunda kaldı.
John Henry

3

Burada Boş, ne demek istediğini ifade eder.
Beyaz boşluklarla dolu bir çizgi veya hiçbir şey içermeyen bir çizgi.
Hiçbir şey içermeyen bir satırı eşleştirmek istiyorsanız '/ ^ $ /' kullanın.


-1

Şey ... Etrafımda dolaştım (notepadd ++ kullanarak) ve bulduğum çözüm bu

\ N \ s

\ n satır sonu için (eşleştirmeye başladığınız yer) - satırın başlangıcının bir dize olması nedeniyle düzeltme benim için yararlı olmaz \ s sonraki dizeye kadar herhangi bir alan kaplar

Umarım yardımcı olur


OP verilen bir normal ifade cevabı istiyor ve yeni satır karakterleriyle ilgili değil.
Moody_Mudskipper

kullanıcı "bir satır boş olup olmadığını kontrol edecek basit bir normal ifade" istiyor bu regex (regexpal.com test) tam olarak bunu yapar. neden test etmiyorsun?
M_TRONIC

R, test vektörü kullanılarak: test_vec <- c(" some"," ",""). Çözümünüz: grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE, çözüm olarak: grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE. oylanan çözüm beklenen sonucu verir, sizinkini vermez.
Moody_Mudskipper

Dediğim gibi ben notepad ++ bu kullanılır ve çalıştı. seninki olmadı. bu yüzden katılmıyorum kabul edebiliriz!
M_TRONIC

Gerçekten ne yaptığınızdan emin değilim ctrl+f, notepad ++ ile mi yapıyorsunuz ? Bu durumda, "Genişletilmiş" Arama modunu seçip '\ n \ s' yi arayarak boş satırları bulabilirsiniz (gerçekte eşleşmese de), "Normal İfade" yi seçerseniz dizeniz aynıdır ve şunları yapabilirsiniz: Ayrıca @polygenelubricants'ın çözümünü de deneyin. o.
Moody_Mudskipper
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.