Python 2.6正则表达式机制?

时间:2011-10-23 11:52:42

标签: python regex

我正在学习正则表达式,我想检查python正在使用的机制。

我有正则表达式:

s = re.findall(ur"\d+\.?\d+", "123,45.567 78").

首先我认为结果只有45.567

当我运行它时,我得到了所有数字,包括小数([“123”,“45.567”,“78”]),但是使用的过程不是很清楚。

以下是我的理解: Python首先使用表达式\ d +,它将找到123即可(在逗号之前尽可能多地进行贪婪搜索)。接下来它需要一个不存在的可选点(。?),它没问题。接下来,它需要一个或多个数字。但是下一个字符是逗号(,),不被接受。 Python将回到12(下降3)。 12满了第一个\ d +。接下来它需要一个不存在的可选点,然后它需要一个或多个数字,并且3匹配它。也就是说,123填满整个正则表达式。

Python会记住123的偏移2并在123之后重新开始。也就是说,Python会开始在字符串45.567,78处使用整个正则表达式。

也就是说,使用整个正则表达式。第一次找到123。 第二次找到45.567,第三次找到78。

2 个答案:

答案 0 :(得分:4)

\d+\.?\d+始终也会匹配\d+\d+,因为.是可选的(也许您现在可以看到它与所有匹配的原因)。所以它可以在约束允许的范围内回溯。

答案 1 :(得分:1)

来自documentation of findall(强调我的):

  

返回字符串中所有非重叠匹配的字符串,作为字符串列表。

在我看来,这会描述你所看到的行为。要获得非重叠匹配,您必须在上一个匹配结束后开始下一个匹配。