[英]Why this regular expression pattern matches even an extra character in string?
對我而言,學習正則表達式變得越來越困難,請參閱以下python正則表達式代碼段。
>>> import re
>>> str = "demo"
>>> re.search("d?mo",str)
<_sre.SRE_Match object at 0x00B65330>
在上面的示例中,為什么它返回匹配對象,即使沒有返回?
我知道,符號“?” 表示它將匹配前一個字符的0或1個重復,但是
從以上示例中,
1.'d' is matched with 'd'
2.'m' is matched with 'm'
3.'o' is matched with 'o'
但是,哪個字符與“ e”匹配? 根據我的理解,只有“ dmo”或“ mo”必須與給定的模式匹配,但是為什么要“ demo”。
如果我只想匹配'dmo'或'mo',正確的模式是什么?
re.search('R', str)
正則表達式R
re.match('.*R', str)
有效地相同。
因此,您(有效地...忽略了換行符)
re.match(".*d?mo", "demo")
.*
匹配"de"
, d?
匹配""
, mo
匹配"mo"
。
您可以通過捕獲組進行檢查:
re.search("(d?mo)", "demo").group(0)
#>>> 'mo'
d?
不匹配,因為它是可選的。
那是因為您正在執行re.search
而不是re.match
。 如果要匹配整個字符串,則必須執行以下操作:
re.match("d?mo$",str)
或者,您也可以執行以下操作:
re.search("^d?mo$",str)
達到類似的效果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.