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 lineestá "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()
truese, 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*$
\stambé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 \te \npor tab e newline adequadamente) e [^ \n\t]corresponder a uma sequência que não seja de espaço em branco.
[ \t]
\rpara 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 FALSEa solução votou: grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE. a solução votada fornece o resultado esperado, o seu não.
ctrl+fno 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.