为什么空的Python正则表达式搜索返回的是匹配项?

4 投票
4 回答
20326 浏览
提问于 2025-04-16 08:38

当你给一个正则表达式对象传递一个空字符串时,搜索的结果会返回一个匹配对象,而不是返回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

加上$符号后结果就不一样了。匹配发生在字符串的末尾,因为那是唯一可以匹配的地方。

撰写回答