【发布时间】:2018-03-13 18:44:03
【问题描述】:
我正在尝试在 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 讨论是否可以确定正确的咒语,但无济于事。
这是很容易手动完成的问题之一。但那样我什么都学不会! :) 我很想知道我是否应该在这里使用一些更简洁的机制/策略。
非常感谢
【问题讨论】:
-
不清楚输出应该是什么。
-
本身并没有真正的输出。我更感兴趣的是让小组退出:{title}、{stuff about title}、{stuff about Bar} 和 {stuff about Baz}。将更新问题,以便更清楚。
-
我不确定每个块应该停在哪里。请查看此演示regex101.com/r/b8PPoL/1
-
我也开始这么想了。我可能问了一个不可能的问题。如何区分新的
{title}和来自{stuff about Baz}的多行文本元素?没有鉴别器,就无法分辨。就我而言,这里有一个我无法透露的隐含层次结构,我相信我必须在这里使用它。无论如何,感谢您的投入!
标签: regex regex-greedy