Python正则表达式 - 查找和计算char序列

时间:2016-04-29 09:41:34

标签: python regex

我试图找到(并计算)一系列连接或分离的字符,如下所示:" abc" (" b"必须遵循" a"" c"必须遵循" b"。不区分大小写)

"A big duck!" -> the pattern should be matched once. 
"A big duckabc!" -> The pattern should be matched twice.

我对正则表达式的了解越多,我知道的就越少。这是使用前瞻的问题吗?

1 个答案:

答案 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)只会返回一个匹配项。请澄清这是否是一个问题。