Regex Python多行正则表达式贪婪组

Regex Python多行正则表达式贪婪组,regex,regex-greedy,Regex,Regex Greedy,我试图用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相关的文本。但是,如果lazy限定

我试图用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
相关的文本。但是,如果lazy限定符位于正则表达式的末尾,
表达式会短暂停止,并错过
baz2text
。相反地,使其贪婪匹配作为最后一组的一部分的所有其他内容

如果可能的话,我宁愿不使用数字限定符,而是根据以下条件大致匹配:

{title}
{stuff about title}

Bar
{stuff about Bar}

Baz
{stuff about Baz}
因此,我可以迭代每个匹配并相应地提取组。请注意,我并没有将此表述为提取具体输出。我最感兴趣的是获取正则表达式的“组”,因此它们表示:
{title}
{stuff about title}
{stuff about bar}
{stuff about Baz}

我正和她闲逛,想看看我是否能确定正确的咒语,但没有用

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


非常感谢如果您知道
Foo
Baz
之后的下一组,那么您需要的是 :
([\S]+)(\n*)([\S\S]*?)条形([\S\S]*?)Baz([\S\S]*?)(?=Foo)


Lookaheads是零宽度断言,因此它确保匹配立即出现,但不会更改当前位置。

不清楚应该是什么输出。实际上没有输出本身。我更感兴趣的是让这些小组脱颖而出:{title}、{stuff about title}、{stuff about Bar}和{stuff about Baz}。将更新问题,使其更清楚。我不确定每个街区应该停在哪里。请看这个演示,我也开始这么想了。我可能问了一个不可能的问题。如何区分新的
{title}
和多行文本的某些元素与
{stuff about Baz}
?没有鉴别器,就没有办法辨别。在我的例子中,有一个隐式的层次结构,我不能在这里透露,我相信我必须在这里使用它。无论如何,感谢您的投入!这适用于固定名称,如
Foo
,但不适用于任意标题。尽管如此,还是感谢您对“展望”的参考。它是一种不同的看待它的方式,我没有考虑。将在前瞻表达式中试验正则表达式。