我正在学习正则表达式,我想检查python正在使用的机制。Python 2.6正则表达式机制?
我的正则表达式:
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个fullfils是整个正则表达式。
Python会记住123的偏移量2,并在123之后重新开始。也就是说,Python会开始在字符串45.567,78处使用整个正则表达式。
也就是说,整个正则表达式用于三倍。第一次发现123 找到45.567和第三次它会找到78
请多关注问题的格式。大块文字难以阅读。并使用代码格式。 – Mat
运行's = re.findall(ur“\ d + \。?\ d +”,“123,45.567 78”,re.DEBUG)应该可以帮助您了解Python的行为。 – robert
您对第一个“123”匹配的描述是正确的。匹配后,正则表达式引擎会尝试匹配紧接在第一个匹配之后的位置(逗号前的位置),并且这会失败。但是引擎不会放弃 - 它会在字符串中的下一个字符上“碰撞”_并且能够匹配“45.567”。然后在空间之前再次失败并碰撞,然后找到第三个匹配。正则表达式引擎会在字符串中的每个位置检查匹配,即使在字符串中最后一个字符后面的位置也会碰撞。 – ridgerunner