Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.6正则表达式机制?_Python_Regex - Fatal编程技术网

Python 2.6正则表达式机制?

Python 2.6正则表达式机制?,python,regex,Python,Regex,我正在学习正则表达式,我想检查python使用的机制 我有正则表达式: s = re.findall(ur"\d+\.?\d+", "123,45.567 78"). 首先我认为结果只有45.567 当我运行它时,我得到了所有的数字,包括小数([“123”,“45.567”,“78”),但它不太清楚所使用的过程 以下是我的理解: Python首先以表达式\d+开始,该表达式将找到123,这是确定的(在逗号之前尽可能多地进行贪婪搜索)。下一步,它需要一个可选的点(.?),它不在那里,并且是ok的

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

我有正则表达式:

s = re.findall(ur"\d+\.?\d+", "123,45.567 78").
首先我认为结果只有45.567

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

以下是我的理解: Python首先以表达式\d+开始,该表达式将找到123,这是确定的(在逗号之前尽可能多地进行贪婪搜索)。下一步,它需要一个可选的点(.?),它不在那里,并且是ok的。接下来,它需要一个或多个数字。但是下一个字符是一个不被接受的逗号(,)。Python将返回到12(下降3)。12 fullfils第一个\d+。下一步,它需要一个可选的点不在那里,下一步,它需要一个或多个数字,3匹配它。也就是说,123 fullfil是整个正则表达式

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

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

\d+\.?\d+
也将始终匹配
\d+\d+
,因为
是可选的(也许您现在看到了为什么它匹配所有的代码)。因此,它可以在约束允许的范围内尽可能多地回溯。

\d+\?\d+
也将始终匹配
\d+\d+
,因为
是可选的(也许您现在可以看到为什么它匹配所有项)。因此,它可以在约束允许的范围内进行回溯。

来自(强调矿):

以字符串列表的形式返回字符串中模式的所有非重叠匹配项

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

从(我的重点):

以字符串列表的形式返回字符串中模式的所有非重叠匹配项


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

请注意问题的格式。大块的文字很难阅读。并使用代码格式。运行
s=re.findall(ur“\d+\.?\d+”,“123,45.567 78”,re.DEBUG)
应该可以帮助您了解Python的行为。您对第一个
123
如何匹配的描述是正确的。匹配后,正则表达式引擎尝试在第一次匹配后的位置(逗号前的位置)进行匹配,但失败。但是引擎并没有放弃——它“前进”到字符串中的下一个字符,并且能够匹配
45.567
。然后它失败了,在空格前再次颠簸,然后找到第三个匹配项。正则表达式引擎将在字符串中的每个位置检查匹配项,即使在字符串中最后一个字符后面的位置也是如此。请注意问题的格式。大块的文字很难阅读。并使用代码格式。运行
s=re.findall(ur“\d+\.?\d+”,“123,45.567 78”,re.DEBUG)
应该可以帮助您了解Python的行为。您对第一个
123
如何匹配的描述是正确的。匹配后,正则表达式引擎尝试在第一次匹配后的位置(逗号前的位置)进行匹配,但失败。但是引擎并没有放弃——它“前进”到字符串中的下一个字符,并且能够匹配
45.567
。然后它失败了,在空格前再次颠簸,然后找到第三个匹配项。正则表达式引擎将在字符串中的每个位置检查匹配,即使在字符串中最后一个字符后面的位置也是如此。