为什么这个正则表达式模式甚至匹配字符串中的额外字符?

时间:2014-05-25 14:09:45

标签: python regex

我学习正则表达式变得越来越困难,请参阅以下python正则表达式代码片段。

>>> import re
>>> str = "demo"
>>> re.search("d?mo",str)
<_sre.SRE_Match object at 0x00B65330>

在上面的例子中,为什么它返回匹配的对象,即使它不是?

我知道,符号&#39;?&#39;意味着它将匹配前一个字符的0或1次重​​复,但

从上面的例子中,

1.'d' is matched with 'd'
2.'m' is matched with 'm'
3.'o' is matched with 'o'

但是哪个角色&#39; e&#39;匹配?根据我的理解,只有&#39; dmo&#39;或者&#39; mo&#39;必须与给定的模式匹配,但为什么要演示&#39;。

如果我只想匹配&#39; dmo&#39;或者&#39; mo&#39;,什么是正确的模式?

2 个答案:

答案 0 :(得分:2)

对于正则表达式re.search('R', str)

re.match('.*R', str)实际上与R相同。

所以你有(实际上......忽略换行)

re.match(".*d?mo", "demo")

.*匹配"de"d?匹配""mo匹配"mo"


您可以使用捕获组进行检查:

re.search("(d?mo)", "demo").group(0)
#>>> 'mo'

d?不匹配,因为它是可选的。

答案 1 :(得分:1)

这是因为您正在re.search而不是re.match。如果你想匹配整个字符串,你必须这样做:

re.match("d?mo$",str)

或者,您也可以这样做:

re.search("^d?mo$",str)

达到类似的效果