我试图找到(并计算)一系列连接或分离的字符,如下所示:" abc" (" b"必须遵循" a"" c"必须遵循" b"。不区分大小写)
"A big duck!" -> the pattern should be matched once.
"A big duckabc!" -> The pattern should be matched twice.
我对正则表达式的了解越多,我知道的就越少。这是使用前瞻的问题吗?
答案 0 :(得分:4)
您可以使用正则表达式a.*?b.*?c
查找a
,然后使用b
,然后使用c
,其间包含一些可选字符。 *?
使得那些中间字符串不贪婪(否则你只得到第二个例子的一个匹配)。
>>> p = "a.*?b.*?c"
>>> re.findall(p, "A big duck!", flags=re.I) # re.I == ignore case
['A big duc']
>>> re.findall(p, "A big duckabc!", flags=re.I)
['A big duc', 'abc']
您还可以从要加入的字符构造该正则表达式:
>>> chars = "abc"
>>> p = ".*?".join(chars)
要获得匹配数,只需获取结果列表的len
。
注意:不处理重叠匹配,即re.findall(p, "aaabbbccc", flags=re.I)
只会返回一个匹配项。请澄清这是否是一个问题。