簡體   English   中英

為什么此正則表達式模式甚至匹配字符串中的多余字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM