Reg ex返回额外的匹配

时间:2017-09-08 13:20:44

标签: regex python-2.7

我试图在第3项到第4a项之间选择文本,如果找不到项目4a那么它应该找到第5项以结束搜索。

在reg ex(with group)下面可以选择正确的值。但是,它会返回一个包含匹配组的元组。

re.findall(r'item 3\D(.*?)(item 4a|item 5)',"item 3 first value item 4 foo item 4a and item 5 item 3 second value item 4a")

输出:

[('first value item 4 foo ', 'item 4a'), ('second value ', 'item 4a')]

如果不使用群组,请建议任何更好的方法来实现这一目标。

2 个答案:

答案 0 :(得分:0)

您可以使用向前看(?=)或使第二组未被捕获(?:,因此不会返回item4aitem5

re.findall(r'item 3\D(.*?)(?=item 4a|item 5)',"item 3 first value item 4 foo item 4a and item 5 item 3 second value item 4a")
​#                          ^^   # or use ?: as the other answer
# ['first value item 4 foo ', 'second value ']

答案 1 :(得分:0)

您可以将non-capturing group用于:

re.findall(r'item 3\D(.*?)(?:item 4a|item 5)',"item 3 first value item 4 foo item 4a and item 5 item 3 second value item 4a")