如何使用正则表达式检查行是否为空

Adn*_*nan 142 regex

我正在尝试制作一个简单的正则表达式来检查一行是否为空.

案件;

"    some"   // not blank
"   " //blank
"" // blank
Run Code Online (Sandbox Code Playgroud)

pol*_*nts 305

你想要的模式在多线模式下是这样的:

^\s*$
Run Code Online (Sandbox Code Playgroud)

说明:

  • ^ 是字符串锚点的开头.
  • $ 是字符串锚的结束.
  • \s 是空白字符类.
  • * 是零或多重复.

在多行模式,^而且$还匹配行的开头和结尾.

参考文献:


非正则表达式替代方案:

您还可以line通过trim()-ing 检查给定字符串是否为"空白"(即仅包含空格),然后检查结果字符串isEmpty().

在Java中,这将是这样的:

if (line.trim().isEmpty()) {
    // line is "blank"
}
Run Code Online (Sandbox Code Playgroud)

正则表达式解决方案也可以简化而无需锚点(因为matches在Java中定义的方式)如下:

if (line.matches("\\s*")) {
    // line is "blank"
}
Run Code Online (Sandbox Code Playgroud)

API参考


小智 44

实际上在多线模式下,更正确的答案是:

/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
Run Code Online (Sandbox Code Playgroud)

接受的答案:^\s*$与最后一行为空白时的情况不匹配(在多线模式下).


Mar*_*tos 9

试试这个:

^\s*$
Run Code Online (Sandbox Code Playgroud)

  • @Adnan,请注意`\ s`也匹配换行符,因此您不会在包含连续空行的字符串中"找到"单个空行. (5认同)

sou*_*rge 5

最便携的正则表达式是^[ \t\n]*$匹配一个空字符串(请注意,您需要替换,\t并相应地\n使用制表符和换行符)并[^ \n\t]匹配非空白字符串.


Joh*_*nry 5

这个答案完全归功于bchr02。但是,我不得不稍微修改它以捕捉具有(注释结尾)后跟空行的行的场景。正则表达式将非空行与.*/*/

新的: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

我所做的只是添加^第二个字符来表示行的开头。

  • 为什么不对 bchr02 的答案发表评论并建议改进他的答案? (2认同)