我试图在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}
所以我可以遍历每个匹配并相应地提取组。请注意,我没有在提取具体输出方面做出这样的说法。我最感兴趣的是获得正则表达集团'所以他们代表:{title}
,{stuff about title}
,{stuff about bar}
,{stuff about Baz}
我和regex101一起玩,看看我是否能确定正确的咒语无济于事。
这是其中一个容易手动完成的问题。但后来我什么都学不到! :)我很想知道我是否应该使用一些更清洁的机制/策略。
非常感谢
答案 0 :(得分:1)
如果你知道Foo
是Baz
之后的下一个群组,那么你需要的是一个
lookahead:([\S ]+)(\n*)([\s\S]*?)Bar([\s\S]*?)Baz([\s\S]*?)(?=Foo)
。
前瞻是零宽度断言,因此它确保紧接着匹配,但不会改变当前位置。