簡體   English   中英

如何匹配最長的模式

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

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