匹配空字符串与正则表达式

时间:2013-07-12 15:36:43

标签: regex

我在stackoverflow上看过帖子,说正则表达式^$会匹配一个空字符串......所以它让我想到......为什么不是这样的:^\s+$ - 那还不行吗?我知道这更像打字,但在我看来,它也更有意义。我之前没有使用过很多正则表达式,但似乎随着时间的推移我对它们的需求变得越来越大 - 所以我正在接受提示并试图学习。

5 个答案:

答案 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+$

enter image description here

^\s*$

enter image description here

答案 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*$是否匹配空字符串取决于您对"空"的定义。与^$一样,它将匹配完全空字符串。与^$不同,它还匹配仅包含空格和制表符等空格字符的字符串,例如   。这是"权利"定义"空"取决于具体情况。