Eu estou tentando fazer regex simples que irá verificar se uma linha está em branco ou não.
Caso;
" some" // not blank
" " //blank
"" // blank
Eu estou tentando fazer regex simples que irá verificar se uma linha está em branco ou não.
Caso;
" some" // not blank
" " //blank
"" // blank
Respostas:
O padrão que você deseja é mais ou menos assim no modo de múltiplas linhas:
^\s*$
Explicação:
^
é o começo da âncora de cadeia.$
é o fim da âncora de cadeia.\s
é a classe de caracteres de espaço em branco.*
é zero ou mais repetições de.No modo multilinha, ^
e $
também corresponde ao início e ao fim da linha.
Você também pode verificar se uma determinada string line
está "em branco" (ou seja, contendo apenas espaços em branco), trim()
pressionando-a e, em seguida, verificando se a string resultante isEmpty()
.
Em Java, isso seria algo como isto:
if (line.trim().isEmpty()) {
// line is "blank"
}
A solução regex também pode ser simplificada sem âncoras (por causa de como matches
é definido em Java) da seguinte maneira:
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
true
se, e somente se, length()
é 0
.boolean String.matches(String regex)
if line.strip():
uma vez que uma string vazia é avaliada comoFalse
Na verdade, no modo multilinha, uma resposta mais correta é esta:
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
A resposta aceita: ^\s*$
não corresponde a um cenário quando a última linha está em branco (no modo de múltiplas linhas).
Tente o seguinte:
^\s*$
\s
também corresponde a quebras de linha, para que você não "encontre" linhas vazias únicas dentro de uma string contendo sucessivas linhas vazias.
O regex mais portátil seria ^[ \t\n]*$
corresponder a uma sequência vazia (observe que você precisaria substituir \t
e \n
por tab e newline adequadamente) e [^ \n\t]
corresponder a uma sequência que não seja de espaço em branco.
[ \t]
\r
para que a regex seja ^[ \t\r\n]*$
. Mas ^\s*$
é melhor - mais conciso. Se você não deseja combinar novas linhas, você pode usar \h
(ou seja, espaço em branco horizontal) como em^\h*$
Crédito total para bchr02 por esta resposta . No entanto, tive que modificá-lo um pouco para capturar o cenário das linhas que têm */
(final do comentário) seguidas por uma linha vazia. O regex estava combinando a linha não vazia com */
.
Novo: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Tudo o que fiz foi adicionar ^
como segundo caractere para indicar o início da linha.
Bem ... eu consertei (usando o notepadd ++) e esta é a solução que encontrei
\ n \ s
\ n para o final da linha (onde você inicia a correspondência) - o sinal de intercalação não ajudaria no meu caso, pois o início da linha é uma string \ s ocupa algum espaço até a próxima string
espero que ajude
test_vec <- c(" some"," ","")
. sua solução: grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE
a solução votou: grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE
. a solução votada fornece o resultado esperado, o seu não.
ctrl+f
no bloco de notas ++? Nesse caso, você pode encontrar (embora não corresponda realmente) as linhas em branco selecionando o modo de pesquisa "Estendida" e pesquisando '\ n \ s'. Se você selecionar "Expressão regular", sua string corresponderá à mesma e você poderá tente também a solução dos @polygenelubricants. Este último realmente corresponderá à linha, você pode verificar e ver a diferença. Sugiro que você edite sua resposta para ter uma idéia mais clara do que está aconselhando, para que os leitores possam aproveitar mais -lo.