我为一个全新的问题道歉。在发布此问题之前,我确实尝试先搜索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的截图。
答案 0 :(得分:8)
为什么上面的正则表达式模式与输入文本匹配?
因为您之前的M
是可选的。 M?
指的是可选的M
。 M
可能会或可能不会出现。因此,上述正则表达式'M?M?M?$'
仅匹配行边界的零宽度端。因此你得到了一场比赛。
答案 1 :(得分:3)
这是因为所有M
符号都是可选的,而$
(此正则表达式中唯一必需的符号)在末尾匹配。你有一个等于zero-length assertion的正则表达式,它没有捕获任何字符,但仍有匹配。
这是一个可视化:
M?M?M?$