我在stackoverflow上看过帖子,说正则表达式^$
会匹配一个空字符串......所以它让我想到......为什么不是这样的:^\s+$
- 那还不行吗?我知道这更像打字,但在我看来,它也更有意义。我之前没有使用过很多正则表达式,但似乎随着时间的推移我对它们的需求变得越来越大 - 所以我正在接受提示并试图学习。
答案 0 :(得分:13)
^\s+$
- 这不起作用吗?
不匹配空字符串。通常,X+
表示X
一次或多次。因此,\s+
无法与空字符串匹配 - 它需要至少一个\s
才能匹配。
^ \s + $ | | | | start of string ---------------------+ | | | whitespace character ------------------+ | | one or more of what precedes -------------+ | end of string ------------------------------+
现在,X*
表示X
0次或更多次,因此^\s*$
确实会匹配空字符串。
^\s+$
^\s*$
答案 1 :(得分:3)
^\s+$
将匹配一个或多个空格的序列,根本不是空字符串。
空字符串不包含任何字符,甚至不包含空格。但是,如果使用^\s*$
,除了空格之外,它还将匹配空字符串。
答案 2 :(得分:1)
\s
是空格的字符类。 ^\s+$
将匹配“\ t \ n”和“\ t \ t”。它们看起来空洞,但不是。空格,制表符和换行符也是字符!通过使用^$
,您可以将字符串的开头与^
匹配,然后紧跟字符串$
的结尾。请注意,匹配正则表达式''
也将匹配空字符串,但在任何地方都匹配。
Python示例:
empty_string_matches = re.findall('', 'hello world')
empty_line_matches = re.findall('^$', 'hello world')
print "Matches for '':", empty_string_matches
print "Matches for '^$':", empty_line_matches
返回
Matches for '': ['', '', '', '', '', '', '', '', '', '', '', '']
Matches for '^$': []
因为'hello world'中每个字母之间都有一个空字符串。
答案 3 :(得分:1)
^\s+$
与空字符串不匹配。它匹配一个或多个空格符号(空格,制表符,换行符等)的字符串
答案 4 :(得分:1)
正如其他人所说,你可能意味着^\s*$
,而不是^\s+$
,因为^\s+$
将无法匹配空字符串。
^\s*$
是否匹配空字符串取决于您对"空"的定义。与^$
一样,它将匹配完全空字符串。与
^$
不同,它还匹配仅包含空格和制表符等空格字符的字符串,例如
。这是"权利"定义"空"取决于具体情况。