行正则表达式贪婪组
我试图在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*)([sS]*?)Bar([sS]*?)Baz([sS]*?)
现在 - 我想要做的是提出与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混在一起,看看我能否确定正确的咒语是无济于事的。
这是其中很容易手动完成的问题之一。 但后来我什么也学不到! :)我很想知道我是否应该在这里使用一些更清洁的机制/策略。
非常感谢
如果你知道Foo
是Baz
之后的下一个组,那么你需要的是前瞻: ([S ]+)(n*)([sS]*?)Bar([sS]*?)Baz([sS]*?)(?=Foo)
。
Lookaheads是零宽度断言,所以它确保紧跟在后面的匹配,但不会改变当前位置。
链接地址: http://www.djcxy.com/p/74779.html