我要匹配的正则表达式是(b*v)?(x*y)
和c*vn
我正在使用re.findall(r'(b*v)?(x*y)|c*vn', mystring)
,但它返回空字符串。
我已经mystring = bbvxxyccccvnxxxxyyyyy
答案 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']