我有一个大的日志文件,我想在两个字符串之间提取多行字符串:start和end.
以下是来自以下的示例inputfile:
start spam
start rubbish
start wait for it...
profit!
here end
start garbage
start second match
win. end
Run Code Online (Sandbox Code Playgroud)
应打印所需的解决方案:
start wait for it...
profit!
here end
start second match
win. end
Run Code Online (Sandbox Code Playgroud)
我尝试了一个简单的正则表达式,但它返回了所有内容start spam.该怎么做?
编辑:有关实际计算复杂性的其他信息:
fam*_*kin 11
这个正则表达式应该符合你的要求:
(start((?!start).)*?end)
Run Code Online (Sandbox Code Playgroud)
使用re.findall方法和单行修改器re.S来获取多行字符串中的所有出现:
re.findall('(start((?!start).)*?end)', text, re.S)
Run Code Online (Sandbox Code Playgroud)
在这里看一个测试.