Cómo comprobar si una línea está en blanco usando expresiones regulares
Estoy tratando de hacer una expresión regular simple que verifique si una línea está en blanco o no.
Caso;
" some" // not blank
" " //blank
"" // blank
El patrón que desea es algo como este en modo multilínea:
^\s*$
Explicación:
^
es el comienzo del ancla de cuerda.$
es el final de la cuerda del ancla.\s
es la clase de carácter de espacio en blanco.*
es cero o más repetición de.
En modo multilínea, ^
y $
también coincide con el principio y el final de la línea.
Referencias:
- regular-expressions.info/Anchors , clases de caracteres y repetición .
Una alternativa sin expresiones regulares:
También puede verificar si una cadena determinada line
está "en blanco" (es decir, contiene solo espacios en blanco) poniendo trim()
-y luego verificando si la cadena resultante isEmpty()
.
En Java, esto sería algo como esto:
if (line.trim().isEmpty()) {
// line is "blank"
}
La solución de expresiones regulares también se puede simplificar sin anclajes (debido a cómo matches
se define en Java) de la siguiente manera:
if (line.matches("\\s*")) {
// line is "blank"
}
Referencias API
String String.trim()
- Devuelve una copia de la cadena, omitiendo los espacios en blanco iniciales y finales.
boolean String.isEmpty()
- Devuelve
true
si, y sólo si,length()
es0
.
- Devuelve
boolean String.matches(String regex)
- Indica si esta cadena (completa) coincide o no con la expresión regular dada.
En realidad, en modo multilínea una respuesta más correcta es esta:
/(^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
La respuesta aceptada: ^\s*$
no coincide con un escenario en el que la última línea está en blanco (en modo multilínea).
Editar: se agregó un ^
hacia el principio para detectar el caso de líneas que terminan en */
seguidas de una nueva línea. Gracias Juan Enrique.
Prueba esto:
^\s*$
Crédito completo a bchr02 por esta respuesta . Sin embargo, tuve que modificarlo un poco para captar el escenario de las líneas que tienen */
(fin del comentario) seguida de una línea vacía. La expresión regular coincidía con la línea no vacía con */
.
Nuevo: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Todo lo que hice fue agregar ^
un segundo carácter para indicar el inicio de la línea.