Python正则表达式:限制重复次数

时间:2014-06-04 17:07:30

标签: python regex

我需要通过pat字符串确定如何使用src字符串:

src ='AAAABBBB'
pat ='(A+|B+)B+'

然而,'+'匹配任何1或任何数量的外观,当src很大时,它可能会非常慢。但是因为我确切地知道src是什么,所以我可以设计一个pat来精确匹配每个时期出现的“A”或“B”的数量,例如,

pat = '(A|B)\4B\4'

但是我的问题还需要一个外观为4或更少的语法,比如

pat= '(A|B)\4(or less)B\4(or less)'

任何人都知道这种语法吗?

1 个答案:

答案 0 :(得分:7)

您可以使用{m}语法指定特定数量的重复,其中 m 是预期的重复次数:

A{4}B{4}

需要完全四个A和四个B字符。

有类似的语法来指定范围而不是固定数字;来自Regular Expression syntax documentation

  

{m}
  指定应匹配先前RE的 m 副本;较少的匹配导致整个RE不匹配。例如,a{6}将恰好匹配六个'a'个字符,但不会匹配五个。

     

{m,n}   导致生成的RE从前一个RE的 m n 重复匹配,尝试匹配尽可能多的重复。例如,a{3,5}将匹配3到5个'a'个字符。省略 m 指定零的下限,省略 n 指定无限上限。例如,a{4,}b将匹配aaaab或一千'a'个字符,后跟b,但不会aaab。逗号可能不会被省略,或者修饰符会与之前描述的形式混淆。

     

{m,n}?
  导致生成的RE从前一个RE的 m n 重复匹配,尝试匹配尽可能少的重复。这是前一个限定符的非贪婪版本。例如,在6个字符的字符串'aaaaaa'上,a{3,5}将匹配5个'a'个字符,而a{3,5}?只会匹配3个字符。