如何使用正则表达式检查一行是否为空
如何使用正则表达式检查一行是否为空
在多行模式下,一个更正确的答案是:
/(^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
接受的答案:`^\s*$` 不适用于最后一行为空的情况(在多行模式下)。
编辑:在开头添加了一个 `^`,以捕获以 `*/` 结尾并跟随一个换行符的情况。谢谢 John Henry。
确切地说,我确认了这个情况。接受的答案在我的文件中漏掉了许多空行,但这个答案捕获了它们所有。两个正则表达式的并集可以捕获每种情况。
这个答案在像 Notepad++ 这样的工具中完美地运行。接受的答案匹配多个空行,但不匹配单个空行。
接受的答案在我的情况下(多行)确实有效。这个答案也有效。
所选择的答案不适用于删除空行。这个答案适用于删除空行,所以对我来说,这个答案是最好的。
在这个其他答案中还有一个小的修复(如果你有以 `*/`(注释结束)结尾并跟随一个空行的情况)。
如何使用正则表达式检查一行是否为空?
问题描述:
如何使用正则表达式检查一行是否为空?
解决方法:
你想要的模式在多行模式下是这样的:
^\s*$
解释:
^
是字符串的开始锚点。$
是字符串的结束锚点。\s
是空白字符类。*
是零次或多次重复。
在多行模式下,^
和$
也匹配行的开始和结束。
参考文献:
非正则表达式的替代方法:
你还可以通过对字符串line
进行trim()
操作,然后检查结果字符串isEmpty()
来判断给定的字符串line
是否为空(即只包含空格)。
在Java中,可以这样做:
if (line.trim().isEmpty()) { // line is "blank" }
正则表达式的解决方法也可以简化,不需要使用锚点(因为在Java中matches
如何定义):
if (line.matches("\\s*")) { // line is "blank" }
API参考:
String String.trim()
- 返回一个去除了前导和尾随空格的字符串的副本。
boolean String.isEmpty()
- 如果
length()
为0
,则返回true
。
- 如果
boolean String.matches(String regex)
- 告诉是否整个字符串与给定的正则表达式匹配。
请注意Marcelo的答案中Bart的评论;根据你想如何处理多个空行,模式可能会略有不同。
这是错误的。当行尾是"\r\n"时,它只找到一个单独的换行符,而不是空行"\r\n\r\n"。
请注意,^\s*$
无法检测到字符串中的所有空行,因为\s*
也会匹配\n
,所以连续的空行会被视为一个匹配。而^\s*?$
将匹配每一行的空行。