我正在学习re
模块,并且在理解re.search
和re.match
时遇到问题。 documentation给出了一个很好的例子,所以我决定尝试这些:
>>> import re
>>> pattern = re.compile('\d*')
>>> string = "123"
>>> pattern.match(string)
<_sre.SRE_Match object; span=(0, 3), match='123'>
>>> pattern.search(string)
<_sre.SRE_Match object; span=(0, 3), match='123'>
这里没有惊喜,所以我稍微更改了字符串:
>>> string = "hello 123"
>>> pattern.match(string)
<_sre.SRE_Match object; span=(0, 0), match=''>
>>> pattern.search(string)
<_sre.SRE_Match object; span=(0, 0), match=''>
为什么在search
的最后一次通话中找不到任何内容?我希望它返回类似这样的东西(一个非空的匹配对象):
<_sre.SRE_Match object; span=(6, 9), match='123'>
上次拨打search
期间会发生什么? Python 3.4.3
答案 0 :(得分:3)
这是你的量词! *
量词匹配前一个原子的ZERO或更多(在本例中为数字\d
)。返回的第一个匹配是零位的零数量。
我可以证明:
>>> import re
>>> pattern = re.compile(r"\d*")
>>> string = "hello 123"
>>> pattern.match(string)
<_sre.SRE_Match object; span=(0, 0), match=''>
>>> pattern.search(string)
<_sre.SRE_Match object; span=(0, 0), match=''>
>>> pattern = re.compile(r"\d+") # + is one or more, not zero or more
>>> pattern.match(string) # no match at start of string
>>> pattern.search(string)
<_sre.SRE_Match object; span=(6, 9), match='123'>