Python2.6正则表达式机制?

2024-05-01 13:10:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有正则表达式:

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

首先我以为结果只有45.567

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

我的理解是: Python首先使用表达式\d+开始,它将找到123,这是可以的(在逗号之前尽可能多地进行贪婪搜索)。接下来它需要一个可选的点(.?)那是不存在的,它是好的。接下来,它需要一个或多个数字。但下一个字符是不接受的逗号(,)。Python将回到12(drop 3)。12完整填充第一个\d+。接下来它期望一个不存在的可选点,下一个它需要一个或多个数字,3个匹配它。完整的123,这就是全部。在

Python将记住123的偏移量2,并在123之后重新开始。也就是说,Python将在字符串45.567,78处开始使用整个regex。在

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


Tags: 字符串re表达式过程数字字符机制drop
2条回答

来自documentation of findall(重点矿):

Return all non-overlapping matches of pattern in string, as a list of strings.

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

\d+\.?\d+将始终与\d+\d+匹配,因为.是可选的(也许您现在了解了它为什么匹配所有内容)。所以它可以在限制条件允许的情况下回溯。在

相关问题 更多 >