这似乎是一项简单的任务,但我已经投入了足够的时间来最终寻求帮助:
我有一个大致这种格式的长文本文件:
Start of test xyz:
multiple lines of blah blah blah
Start of test wzy:
multiple lines of blah blah blah
Start of test qqq:
multiple lines of blah blah blah
我想在“测试开始”减速后抓取所有东西,这个表达式让我得到了我需要的大约一半:
re.findall(r'Start of test(.+?)Start of test', curfile, re.S)
最明显的问题是我正在消耗我接下来需要搜索的内容的开始,因此产生了我想要的大约一半的结果。假设我可以避免,我仍然无法弄清楚如何获得没有“测试开始”结束匹配的最后一个 block 。
我假设我需要使用否定的先行断言,但我没有多少运气来找出使用它们的正确方法,我一直在尝试类似的东西:
re.findall(r'Start of test(.+?)(?!Start of test)
没有给出有用的结果。
请您参考如下方法:
我想这就是你要找的模式
测试开始(.+?)(?=测试开始|$)
那么你的新代码应该是
re.findall(r'Start of test(.+?)Start of test', curfile, re.S)
参见 demo
