Je suis en train de créer une regex simple qui vérifiera si une ligne est vide ou non.
Cas ;
" some" // non vide
" " //vide
"" // vide
Je suis en train de créer une regex simple qui vérifiera si une ligne est vide ou non.
Cas ;
" some" // non vide
" " //vide
"" // vide
Le motif que vous voulez est quelque chose comme ceci en mode multiligne :
^\s*$
Explication :
^
est l'ancre du début de la chaîne.$
est l'ancre de fin de chaîne.\s
est la classe de caractères espace blanc.*
est une répétition de zéro ou plusieurs fois.En mode multiligne, ^
et $
correspondent également au début et à la fin de la ligne.
Vous pouvez également vérifier si une chaîne donnée ligne
est "vide" (c'est-à-dire ne contient que des espaces blancs) en l'enlevant avec trim()
, puis en vérifiant si la chaîne résultante isEmpty()
.
En Java, cela ressemblerait à ceci :
if (line.trim().isEmpty()) {
// la ligne est "vide"
}
La solution en regex peut également être simplifiée sans ancres (à cause de la façon dont matches
est défini en Java) comme suit :
if (line.matches("\\s*")) {
// la ligne est "vide"
}
String String.trim()
boolean String.isEmpty()
true
si, et seulement si, length()
est 0
.boolean String.matches(String regex)
@Adnan : prenez note du commentaire de Bart dans la réponse de Marcelo; en fonction de la manière dont vous souhaitez gérer les lignes vides multiples, le schéma peut légèrement changer.
Eh bien, je lis un fichier à partir de Java, ligne par ligne, donc je suppose que cela ira bien.
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 où la dernière ligne est vide (en mode multiligne).
Édition : ajout d'un ^
vers le début pour capturer le cas des lignes se terminant par */
suivi d'une nouvelle ligne. Merci John Henry.
Exactement, et j'ai confirmé que c'est le cas. La réponse acceptée a manqué de nombreuses lignes vides dans mon fichier, mais cela les a toutes attrapées. L'union des deux regex capture tous les cas.
Cette réponse a parfaitement fonctionné dans un outil tel que Notepad++. La réponse acceptée correspondait à plusieurs lignes vides mais pas à des lignes vides simples.
Dans mon cas, la réponse acceptée ne fonctionne pas dans Sublime Text 3, et ceci fonctionne.
Tout le crédit va à bchr02 pour cette réponse. Cependant, j'ai dû la modifier un peu pour prendre en compte le scénario des lignes contenant */
(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 est d'ajouter ^
comme deuxième caractère pour indiquer le début de la ligne.
Sur Windows, vous devez également tenir compte du caractère de retour chariot \r
donc l'expression régulière serait ^[ \t\r\n]*$
. Mais ^\s*$
est meilleure - plus concise. Si vous ne voulez pas prendre en compte les sauts de ligne, vous pouvez utiliser \h
(signifiant espace horizontal) comme dans ^\h*$
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Voici ce que signifie Blank. Une ligne contient uniquement des espaces ou une ligne ne contient rien. Si vous souhaitez correspondre à une ligne qui ne contient rien, utilisez '/^$/'