Python 限制重复次数

Python 限制重复次数,python,regex,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)' 有人知道这种语法吗?您可以使用{m

我需要确定如何通过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)'

有人知道这种语法吗?

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

A{4}B{4}
只需要四个
A
和四个
B
字符

有类似的语法来指定一个范围而不是一个固定的数字;从:

{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'
字符后跟a
b
,但不匹配
aaab
。逗号不能省略,否则修饰符会与前面描述的形式混淆

{m,n}?

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


好!!但是如果我不能确定它是贪婪的还是非贪婪的呢?@Jun:你是什么意思?可变大小的量词(
*
+
{m,n}
)都有贪婪和非贪婪的变体;后者通过在量词中添加
{m}
永远不能是贪婪的或非贪婪的,它只匹配精确数量的字符。好的,我理解,所以只有当匹配有不同的结果时才会发生贪婪或非贪婪,如果根本不匹配,就没有贪婪或非贪婪的事情值得关注。感谢不要忘记:
{m,n}
而不是
{m,n}
(模式不应该有空格,否则它会将花括号解释为文本)这可能有点旧,但如果我想选择2或4?像
{2 | 4}
但是有效。