我需要通过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)'
任何人都知道这种语法吗?
答案 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个字符。