[英]How to match to the longest pattern
如何修改以下內容以匹配abbb
而不是僅僅停留在 ab?
>>> re.match('ab|abb|abbb', 'abbb')
<re.Match object; span=(0, 2), match='ab'>
你可以使用:
re.match('ab(b(b)?)?', 'abbb')
<_sre.SRE_Match object; span=(0, 4), match='abbb'>
?
這里的意思是前面的項目是可選的,但是它是貪婪的,所以如果可能的話,這個項目將被包含在匹配中(惰性等效項是??
)。
此處不需要內括號(因為它們僅包含一個字符),但包含在內括號以使其更明顯,您可以將其擴展到更長的序列。 您嚴格需要的是:
re.match('ab(bb?)?', 'abbb')
以上不依賴於b
在模式中重復的事實,例如,您可以類似地具有:
re.match('ab(c(d)?)?', 'abcd')
<_sre.SRE_Match object; span=(0, 4), match='abcd'>
但是,如果實際上您不需要這種方法的通用性,那么您可以改為使用以下方法來匹配a
后跟 1 到 3 b
s:
re.match('ab{1,3}', 'abbb')
<_sre.SRE_Match object; span=(0, 4), match='abbb'>
同樣, {1,3}
量詞是貪心的,所以會盡可能多地匹配。 (惰性等價物是{1,3}?
)
這取決於您的模式的順序。 嘗試
re.match('abbb|abb|ab', 'abbb')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.