J'essaye de faire de simples regex qui vérifieront si une ligne est vide ou non.
Cas;
" some" // not blank
" " //blank
"" // blank
J'essaye de faire de simples regex qui vérifieront si une ligne est vide ou non.
Cas;
" some" // not blank
" " //blank
"" // blank
Réponses:
Le motif que vous voulez est quelque chose comme ceci en mode multiligne:
^\s*$
Explication:
^ est le début de l'ancre de chaîne.$ est la fin de l'ancre de chaîne.\s est la classe de caractères d'espaces.* est une répétition zéro ou plus de.En mode multiligne, ^et $correspond également au début et à la fin de la ligne.
Vous pouvez également vérifier si une chaîne donnée lineest "vide" (c'est-à-dire ne contenant que des espaces) en la trim()-ing, puis en vérifiant si la chaîne résultante isEmpty().
En Java, ce serait quelque chose comme ceci:
if (line.trim().isEmpty()) {
// line is "blank"
}
La solution regex peut également être simplifiée sans ancres (en raison de la façon dont matchesest définie en Java) comme suit:
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
truesi, et seulement si, length()est 0.boolean String.matches(String regex)
if line.strip(): puisqu'une chaîne vide est évaluée àFalse
En fait, en mode multiligne, une réponse plus correcte est la suivante:
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
La réponse acceptée: ^\s*$ne correspond pas à un scénario lorsque la dernière ligne est vide (en mode multiligne).
Essaye ça:
^\s*$
\scorrespond également aux sauts de ligne, donc vous ne "trouverez" pas de lignes vides uniques à l'intérieur d'une chaîne contenant des lignes vides successives.
L'expression régulière la plus portable serait de faire ^[ \t\n]*$correspondre une chaîne vide (notez que vous devrez remplacer \tet \npar tabulation et nouvelle ligne en conséquence) et de [^ \n\t]faire correspondre une chaîne non-espace.
[ \t]
\rserait le regex ^[ \t\r\n]*$. Mais ^\s*$c'est mieux - plus concis. Si vous ne voulez pas faire correspondre les nouvelles lignes, vous pouvez utiliser \h(c'est-à-dire un espace blanc horizontal) comme dans^\h*$
Crédit complet à bchr02 pour cette réponse . Cependant, j'ai dû le modifier un peu pour attraper le scénario pour les lignes qui ont */(fin de commentaire) suivies d'une ligne vide. Le regex correspondait à la ligne non vide avec */.
Nouveau: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Tout ce que j'ai fait, c'est ajouter ^comme deuxième caractère pour signifier le début de la ligne.
Eh bien ... j'ai bricolé (en utilisant notepadd ++) et c'est la solution que j'ai trouvée
\ n \ s
\ n pour la fin de la ligne (où vous commencez la correspondance) - le signe d'insertion ne serait pas utile dans mon cas car le début de la ligne est une chaîne \ s prend n'importe quel espace jusqu'à la chaîne suivante
J'espère que ça aide
test_vec <- c(" some"," ",""). votre solution: grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSEla solution Voté: grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE. la solution votée donne le résultat attendu, la vôtre non.
ctrl+fdans notepad ++? Dans ce cas, vous pouvez trouver (mais pas vraiment correspondre) les lignes vides en sélectionnant le mode de recherche «Étendu» et en recherchant «\ n \ s», si vous sélectionnez «Expression régulière», votre chaîne correspondra de la même manière, et vous pouvez essayez également la solution de @polygenelubricants. Cette dernière correspondra vraiment à la ligne, vous pouvez vérifier et voir la différence. Je vous suggère de modifier votre réponse pour être plus claire sur ce que vous conseillez, afin que les lecteurs puissent profiter davantage de it.