Próbuję utworzyć proste wyrażenie regularne, które sprawdzi, czy linia jest pusta, czy nie.
Walizka;
" some" // not blank
" " //blank
"" // blank
Próbuję utworzyć proste wyrażenie regularne, które sprawdzi, czy linia jest pusta, czy nie.
Walizka;
" some" // not blank
" " //blank
"" // blank
Odpowiedzi:
Wzór, który chcesz, wygląda mniej więcej tak w trybie wielowierszowym:
^\s*$
Wyjaśnienie:
^ jest początkiem kotwicy struny.$ jest końcem kotwicy struny.\s jest klasą białych znaków.* to zero lub więcej powtórzeń.W trybie wielowierszowym, ^a $także dopasuj początek i koniec wiersza.
Możesz również sprawdzić, czy dany ciąg linejest „pusty” (tj. Zawiera tylko białe spacje), wykonując trim()go, a następnie sprawdzając, czy otrzymany ciąg isEmpty().
W Javie wyglądałoby to mniej więcej tak:
if (line.trim().isEmpty()) {
// line is "blank"
}
Rozwiązanie regex można również uprościć bez kotwic (ze względu na sposób matcheszdefiniowania w Javie) w następujący sposób:
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
truejeśli i tylko wtedy, gdy length()jest 0.boolean String.matches(String regex)
if line.strip(): ponieważ pusty łańcuch ma wartośćFalse
Właściwie w trybie wielowierszowym bardziej poprawna odpowiedź brzmi:
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Zaakceptowana odpowiedź: ^\s*$nie pasuje do scenariusza, gdy ostatnia linia jest pusta (w trybie wielowierszowym).
Spróbuj tego:
^\s*$
\sdopasowuje również podziały wierszy, więc nie „znajdziesz” pojedynczych pustych wierszy w ciągu zawierającym kolejne puste wiersze.
Najbardziej przenośne regex byłoby ^[ \t\n]*$dopasować pusty ciąg (zauważ, że będzie trzeba wymienić \ti \nprzy karcie i nowa linia Odpowiednio) i [^ \n\t]pasujące ciąg bez spacji.
[ \t]
\rwięc będzie to wyrażenie regularne ^[ \t\r\n]*$. Ale ^\s*$jest lepiej - bardziej zwięźle. Jeśli nie chcesz dopasowywać nowych linii, możesz użyć \h(czyli poziomych białych znaków) jak w^\h*$
Pełne uznanie dla bchr02 za tę odpowiedź . Musiałem jednak trochę zmodyfikować, aby złapać scenariusz dla wierszy, które mają */(koniec komentarza), po którym następuje pusta linia. Wyrażenie regularne pasowało do niepustej linii z */.
Nowy: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Wszystko, co zrobiłem, to dodać ^jako drugi znak, aby oznaczyć początek wiersza.
Cóż ... majstrowałem (używając notepadd ++) i to jest rozwiązanie, które znalazłem
\ n \ s
\ n dla końca linii (gdzie zaczynasz dopasowywanie) - daszek nie byłby pomocny w moim przypadku, ponieważ początek wiersza jest łańcuchem \ s zajmuje dowolną przestrzeń do następnego ciągu
mam nadzieję, że to pomoże
test_vec <- c(" some"," ",""). rozwiązanie: grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSEThe głosowało rozwiązanie: grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE. przegłosowane rozwiązanie daje oczekiwany rezultat, a twoje nie.
ctrl+fw notatniku ++? W tym przypadku możesz znaleźć (choć nie do końca pasują) puste wiersze, wybierając tryb wyszukiwania „Rozszerzony” i wyszukując „\ n \ s”. Jeśli wybierzesz „Wyrażenie regularne”, ciąg będzie pasował do tego samego i możesz wypróbuj również rozwiązanie @polygenelubricants. To ostatnie będzie naprawdę pasowało do linii, możesz sprawdzić i zobaczyć różnicę. Sugeruję, aby edytować swoją odpowiedź, aby była bardziej jasna, co radzisz, aby czytelnicy mogli wyciągnąć więcej korzyści z it.