需要Python正则表达式解释 - $ character使用

时间:2015-04-13 06:33:45

标签: python regex

我为一个全新的问题道歉。在发布此问题之前,我确实尝试先搜索stackoverflow。

我正在尝试使用diveintopython3.net中的python学习正则表达式。在摆弄示例时,我无法理解一个特定的输出 正则表达式搜索(如下所示):

>>> pattern = 'M?M?M?$'

>>> re.search(pattern,'MMMMmmmmm')
<_sre.SRE_Match object at 0x7f0aa8095168>

为什么上面的正则表达式模式与输入文本匹配?我的理解是$字符应该只匹配字符串的末尾。但输入文本以'mmmm'结尾。所以我虽然模式不匹配。

我的python版本是:

Python 3.3.2 (default, Dec  4 2014, 12:49:00)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-7)] on linux

编辑:附上了Debuggex的截图。enter image description here

2 个答案:

答案 0 :(得分:8)

  

为什么上面的正则表达式模式与输入文本匹配?

因为您之前的M是可选的。 M?指的是可选的MM可能会或可能不会出现。因此,上述正则表达式'M?M?M?$'仅匹配行边界的零宽度端。因此你得到了一场比赛。

答案 1 :(得分:3)

这是因为所有M符号都是可选的,而$(此正则表达式中唯一必需的符号)在末尾匹配。你有一个等于zero-length assertion的正则表达式,它没有捕获任何字符,但仍有匹配。

这是一个可视化:

M?M?M?$

Regular expression visualization

Debuggex Demo