Я намагаюся зробити простий регулярний вираз, який перевірить, чи рядок порожній чи ні.
Справа;
" some" // not blank
" " //blank
"" // blank
Я намагаюся зробити простий регулярний вираз, який перевірить, чи рядок порожній чи ні.
Справа;
" some" // not blank
" " //blank
"" // blank
Відповіді:
Шар, який ви хочете, є приблизно таким у багаторядковому режимі:
^\s*$
Пояснення:
^ є початком якорного рядка.$ є кінцем якоря струни.\s - клас символів пробілів.* є нульовим або більше повторенням.У багаторядковому режимі, ^а $також відповідати початку та кінця рядка.
Ви також можете перевірити, чи заданий рядок line"порожній" (тобто містить лише пробіли), trim()відмінивши його, а потім перевірити, чи є рядок у результаті isEmpty().
У Java це буде приблизно так:
if (line.trim().isEmpty()) {
// line is "blank"
}
Рішення регулярного вираження також може бути спрощене без прив’язок (через те, як matchesвизначено в Java) наступним чином:
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
trueякщо, і тільки якщо, length()є 0.boolean String.matches(String regex)
if line.strip(): оскільки порожня рядок оцінюється доFalse
Насправді в багаторядковому режимі правильнішою є відповідь:
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Прийнята відповідь: ^\s*$не відповідає сценарію, коли останній рядок порожній (у багаторядковому режимі).
Спробуйте це:
^\s*$
\sтакож відповідає розрив рядків, тому ви не знайдете "порожніх" рядків всередині рядка, що містять послідовні порожні рядки.
Найбільш портативним регулярним виразом буде ^[ \t\n]*$збіг порожнього рядка (зауважте, що вам потрібно буде замінити \tта \nвідповідно табуляцію та новий рядок) та [^ \n\t]відповідати рядку, що не має пробілів.
[ \t]
\rтаким чином буде регулярний вираз ^[ \t\r\n]*$. Але ^\s*$краще - більш лаконічно. Якщо ви не хочете відповідати \h^\h*$
Повна заслуга bchr02 за цю відповідь . Однак мені довелося трохи змінити його, щоб спіймати сценарій для рядків, у яких */(кінець коментаря) слідує порожній рядок. Режекс збігався з порожнім рядком */.
Нове: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Все, що я зробив, - це додати ^як другий символ для позначення початку рядка.
Ну ... я розібрався навколо (використовуючи блокнот ++), і це рішення, яке я знайшов
\ n \ с
\ n для кінця рядка (де ви починаєте відповідати) - карета не допоможе в моєму випадку, оскільки початок рядка є рядком \ s займає будь-який простір до наступного рядка
сподіваюся, що це допомагає
test_vec <- c(" some"," ",""). Ваше рішення: grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE, хто проголосував рішення: grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE. рішення, яке проголосує, дає очікуваний результат, ваше - ні.
ctrl+fу блокноті ++? У цьому випадку ви можете знайти (хоча насправді не збігаються) порожні рядки, вибравши "Розширений" режим пошуку та шукаючи "\ n \ s", якщо ви виберете "Регулярне вираження", ваша рядок буде збігатися з тим самим, і ви можете також спробуйте рішення @polygenelubricants. Останнє дійсно буде відповідати рядку, ви можете перевірити і побачити різницю. Я б запропонував вам відредагувати свою відповідь, щоб бути більш зрозумілим щодо того, що ви радите, щоб читачі могли брати більше значення від це.