Cómo comprobar si una línea está en blanco usando expresiones regulares

Resuelto Adnan asked hace 14 años • 10 respuestas

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
Adnan avatar Jun 10 '10 15:06 Adnan
Aceptado

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.
  • \ses 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 lineestá "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 matchesse 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 truesi, y sólo si, length()es 0.
  • boolean String.matches(String regex)
    • Indica si esta cadena (completa) coincide o no con la expresión regular dada.
polygenelubricants avatar Jun 10 '2010 08:06 polygenelubricants

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.

Bill Christo avatar Sep 01 '2016 23:09 Bill Christo

Prueba esto:

^\s*$
Marcelo Cantos avatar Jun 10 '2010 08:06 Marcelo Cantos

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.

John Henry avatar Oct 10 '2017 07:10 John Henry