我学习正则表达式变得越来越困难,请参阅以下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;,什么是正确的模式?
答案 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)
达到类似的效果