Я пытаюсь сделать простое регулярное выражение, которое будет проверять, является ли строка пустой или нет.
Случай;
" some" // not blank
" " //blank
"" // blank
Я пытаюсь сделать простое регулярное выражение, которое будет проверять, является ли строка пустой или нет.
Случай;
" some" // not blank
" " //blank
"" // blank
Ответы:
Шаблон, который вы хотите, выглядит примерно так в многострочном режиме:
^\s*$
Объяснение:
^ это начало якоря строки.$ конец якоря строки\s класс пробельных символов* ноль или более повторений.В многострочном режиме, ^а $также сопоставить начало и конец строки.
Вы также можете проверить, является ли данная строка line«пустой» (т. Е. Содержащей только пробелы), путем trim()ее включения, а затем проверяя, является ли полученная строка isEmpty().
В Java это будет примерно так:
if (line.trim().isEmpty()) {
// line is "blank"
}
Решение regex также может быть упрощено без привязок (из-за того, как 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
Все, что я сделал, это добавил ^второй символ для обозначения начала строки.
Ну ... я возился (используя notepadd ++), и это решение я нашел
\ N \ s
\ 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в notepad ++? В этом случае вы можете найти (хотя и не совсем совпадают) пустые строки, выбрав «Расширенный» режим поиска и выполнив поиск «\ n \ s», если вы выберете «Регулярное выражение», ваша строка будет совпадать, и вы можете также попробуйте решение @polygenelubricants. Последнее действительно будет соответствовать линии, вы можете проверить и увидеть разницу. Я бы посоветовал вам отредактировать свой ответ, чтобы быть более четким в отношении того, что вы советуете, чтобы читатели могли получить больше пользы от это.