8

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

4

5 回答 5

16

^\s+$- 这也不行吗?

不适用于匹配空字符串。一般来说,X+表示X 一次或多次。因此,\s+不能匹配空字符串 - 它至少需要一个\s才能匹配。

                                     ^ \s + $
                                     | | | |
字符串开头---------+ | | |
空格字符 ------------------+ | |
前面的一项或多项 -------------+ |
字符串结尾 ------------------+

现在,X*表示X 0 次或多次,因此^\s*$确实会匹配一个空字符串。


^\s+$

在此处输入图像描述

^\s*$

在此处输入图像描述

于 2013-07-12T15:39:53.493 回答
3

^\s+$将匹配一个或多个空格的序列,这根本不是空字符串。

空字符串不包含任何字符,甚至不包含空格。但是,如果您使用^\s*$,它将匹配除空格之外的空字符串。

于 2013-07-12T15:39:23.493 回答
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'中的每个字母之间都有一个空字符串。

于 2013-07-12T15:39:33.057 回答
1

^\s+$不匹配空字符串。它匹配一串一个或多个空白符号(空格、制表符、换行符等)

于 2013-07-12T15:39:36.530 回答
1

正如其他人所说,您可能的意思是^\s*$,不是^\s+$,因为^\s+$将无法匹配空字符串,

是否^\s*$匹配空字符串取决于您对“空”的定义。就像^$,它将匹配完全空的字符串。与 不同^$的是,它还将匹配仅由空格和制表符等空白字符组成的字符串,例如   . 哪个是“空”的“正确”定义取决于情况。

于 2013-07-12T15:43:52.857 回答