Python:重新模块初学者

时间:2015-03-18 17:18:09

标签: python regex

我正在学习re模块,并且在理解re.searchre.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

1 个答案:

答案 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'>
相关问题