我试图在第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')]
如果不使用群组,请建议任何更好的方法来实现这一目标。
答案 0 :(得分:0)
您可以使用向前看(?=)或使第二组未被捕获(?:
,因此不会返回item4a
或item5
:
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")