Bir satır boş olup olmadığını kontrol edecek basit regex yapmaya çalışıyorum.
Durum;
" some" // not blank
" " //blank
"" // blank
Bir satır boş olup olmadığını kontrol edecek basit regex yapmaya çalışıyorum.
Durum;
" some" // not blank
" " //blank
"" // blank
Yanıtlar:
İ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.
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 ( matches
Java'da nasıl tanımlandığından dolayı ) aşağıdaki gibi basitleştirilebilir :
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
true
durumunda ve ancak eğer length()
olduğunu 0
.boolean String.matches(String regex)
if line.strip():
boş bir dize değerlendirir beri hiçFalse
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.
Bunu dene:
^\s*$
\s
satı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".
En taşınabilir regex olacağını ^[ \t\n]*$
(Değiştirmeye gerek olacağını not boş bir dize maç için \t
ve \n
buna göre sekmesi ve yeni satır ile) ve [^ \n\t]
bir boşluk olmayan dize eşleşecek.
[ \t]
\r
normal 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*$
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 .
Ş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
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.
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.