我怎样才能将多个正则表达式模式与一个组一起使用?

时间:2017-08-24 15:29:56

标签: python regex python-3.x

我要匹配的正则表达式是(b*v)?(x*y)c*vn

我正在使用re.findall(r'(b*v)?(x*y)|c*vn', mystring),但它返回空字符串。

我已经mystring = bbvxxyccccvnxxxxyyyyy

1 个答案:

答案 0 :(得分:2)

来自re.findall文档:

re.findall(pattern, string, flags=0) Return all non-overlapping matches of pattern in string, as a list of strings. The string is
     

从左向右扫描,并按找到的顺序返回匹配项。如果   模式中存在一个或多个组,返回列表   组;如果模式有多个,这将是一个元组列表   组。 结果中包含空匹配,除非他们触摸了   另一场比赛的开始。

大胆强调我的。所以最重要的是,不要使用捕获组。您可以使用?:标记使其无法捕获。

In [198]: re.findall(r'(?:b*v)?(?:x*y)|(?:c*vn)', mystring)
Out[198]: ['bbvxxy', 'ccccvn', 'xxxxy', 'y', 'y', 'y', 'y']