找到两个字符串之间的最短匹配

Eer*_*nen 4 python regex

我有一个大的日志文件,我想在两个字符串之间提取多行字符串:startend.

以下是来自以下的示例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.该怎么做?

编辑:有关实际计算复杂性的其他信息:

  • 实际文件大小:2GB
  • 发生'开始':~12 M,均匀分布
  • 出现'结束':〜800,靠近文件的末尾.

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)

在这里看一个测试.

  • 为什么我之前从未听说过regex101? (2认同)