相同的模式但不同的结果

时间:2016-04-02 12:15:21

标签: python regex

在RegExr.com中,在示例部分,有一个2-5个字母回文的代码。在Python中使用完全相同的模式并不像RegExr那样捕获所有结果!

Python不会捕获少于4个字符的单词,例如' dad'和7''代码就是这个

\b(\w)?(\w)\w?\2\1

这些不同结果的原因是什么?

1 个答案:

答案 0 :(得分:1)

当重复第一个捕获组时,它适用于Python中的条件:

\b(\w)?(\w)\w?\2(?(1)\1)

(?(1)\1)转换为:如果第一个捕获组成功,则再次匹配第一个捕获的组。

差异很可能是由于正则表达式引擎以不同方式处理可选的非匹配捕获组的方式。例如。 RegExr在浏览器中使用JavaScript引擎,该引擎将空捕获组视为未定义。当尝试在字符串的末尾再次匹配未定义时,它将成功。然而,在Python中,它是不同的,只有在可选的捕获组成功时才会再次成功匹配。它仅仅是实现细节。