【发布时间】:2011-03-02 01:33:47
【问题描述】:
我正在尝试制作简单的正则表达式来检查一行是否为空白。
案例;
" some" // not blank
" " //blank
"" // blank
【问题讨论】:
-
这里空白的意思是你的意思。一行包含完整的空格或一行不包含任何内容。如果要匹配不包含任何内容的行,请使用 '/^$/'
标签: regex
我正在尝试制作简单的正则表达式来检查一行是否为空白。
案例;
" some" // not blank
" " //blank
"" // blank
【问题讨论】:
标签: regex
你想要的模式在多行模式下是这样的:
^\s*$
解释:
^ 是字符串锚的开始。$ 是字符串锚的结尾。\s 是空白字符类。* 是零次或多次重复。在多行模式下,^ 和 $ 也匹配行的开头和结尾。
您还可以通过trim()-ing 来检查给定字符串 line 是否为“空白”(即仅包含空格),然后检查结果字符串是否为 isEmpty()。
在 Java 中,这将是这样的:
if (line.trim().isEmpty()) {
// line is "blank"
}
也可以在没有锚的情况下简化正则表达式解决方案(因为 matches 在 Java 中是如何定义的)如下:
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
length() 是0 时返回true。 boolean String.matches(String regex)
【讨论】:
if line.strip():,因为空字符串的计算结果为 False
其实在多行模式下更正确的答案是这样的:
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
接受的答案:^\s*$ 与最后一行为空白时的场景不匹配(在多行模式下)。
【讨论】:
试试这个:
^\s*$
【讨论】:
\s 也匹配换行符,因此您不会在包含连续空行的字符串中“找到”单个空行。
此answer 的功劳归于 bchr02。但是,我必须对其进行一些修改以捕捉具有*/(注释结束)后跟空行的行的情况。正则表达式将非空行与*/ 匹配。
新:(^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
我所做的只是添加^ 作为第二个字符来表示行首。
【讨论】:
最便携的正则表达式是 ^[ \t\n]*$ 来匹配一个空字符串(请注意,您需要相应地用制表符和换行符替换 \t 和 \n)和 [^ \n\t] 来匹配一个非空白字符串。
【讨论】:
[ \t] 类更改单个空格
\r,因此正则表达式将是 ^[ \t\r\n]*$。但是^\s*$ 更好——更简洁。如果不想匹配换行符,可以使用\h(表示水平空格),如^\h*$
这里的空白表示您的意思。
一行包含完整的空格或一行不包含任何内容。
如果要匹配不包含任何内容的行,请使用 '/^$/'。
【讨论】:
嗯...我修补了一下(使用 notepadd++),这就是我找到的解决方案
\n\s
\n 用于行尾(您开始匹配的位置)-在我的情况下插入符号没有帮助,因为行的开头是一个字符串 \s 在下一个字符串之前占用任何空间
希望对你有帮助
【讨论】:
test_vec <- c(" some"," ","")。您的解决方案:grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE,投票解决方案:grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE。投票的解决方案给出了预期的结果,你的没有。
ctrl+f 吗?在这种情况下,您可以通过选择“扩展”搜索模式并搜索“\n\s”来找到(虽然不是真正匹配)空白行,如果选择“正则表达式”,您的字符串将匹配相同,您可以也尝试@polygenelubricants 的解决方案。后者将真正匹配该行,您可以检查并查看差异。我建议您编辑您的答案以更清楚您的建议,以便读者可以从中获得更多价值它。