为什么空的Python正则表达式搜索返回的是匹配项?
当你给一个正则表达式对象传递一个空字符串时,搜索的结果会返回一个匹配对象,而不是返回None。这样不是应该返回None吗?因为没有任何东西可以匹配。
import re
m = re.search("", "some text")
if m is None:
print "Returned None"
else:
print "Return a match"
顺便提一下,使用特殊符号^
和$
也会得到相同的结果。
4 个回答
1
你需要做的不是检查 m 是否为 None,而是要检查 m 是否为 True:
if m:
print "Found a match"
else:
print "No match"
另外,空的模式会匹配整个字符串。
3
你可以这样理解:你搜索的所有内容都找到了匹配的结果,所以搜索是成功的,你得到了一个匹配对象。
12
空的模式可以匹配字符串中的任何部分。
看看这个:
import re
re.search("", "ffff")
<_sre.SRE_Match object at 0xb7166410>
re.search("", "ffff").start()
0
re.search("$", "ffff").start()
4
加上$符号后结果就不一样了。匹配发生在字符串的末尾,因为那是唯一可以匹配的地方。