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