Python 多行正则表达式贪心组

Python multi-line regex greedy group

我正在尝试解析 Python 中的以下示例文本:

Foo 1
foo1Text

Bar 
bar1Text

Baz 
baz1Text

Foo 2
foo2Text

Bar 
bar2Text

Baz 
baz2Text

# and so on up to Foo/Bar/Baz N

现在,我使用的正则表达式是:

([\S ]+)(\n*)([\s\S]*?)Bar([\s\S]*?)Baz([\s\S]*?)

现在 - 我想做的是提取与 foo/bar/baz 相关的文本。然而,由于正则表达式末尾的惰性限定符,? 表达式突然停止并错过了 baz2text。相反,让它贪婪匹配最后一组的所有其他内容。

如果可能,我宁愿不使用数字限定符,而是根据以下内容广泛匹配:

{title}
{stuff about title}

Bar
{stuff about Bar}

Baz
{stuff about Baz}

所以我可能会遍历每个匹配项并相应地提取组。请注意,我没有围绕提取具体输出来表达这一点。我最感兴趣的是获取正则表达式 'groups' 所以它们代表:{title}{stuff about title}{stuff about bar}{stuff about Baz}

我在 regex101 周围徘徊,想看看我是否能确定正确的咒语,但无济于事。

这是一个很容易手动解决的问题。但那样我就什么也学不到了! :) 我很想知道我是否应该在这里使用一些更简洁的机制/策略。

非常感谢

如果您知道 FooBaz 之后的下一组,那么您需要的是 lookahead: ([\S ]+)(\n*)([\s\S]*?)Bar([\s\S]*?)Baz([\s\S]*?)(?=Foo).

前瞻是 zero-width 断言,因此它确保匹配紧随其后但不会更改当前位置。