0

我有一些文本,其中一些文本由以下内容分隔:

{# xxx #} some text {# zzz #}

我在整个文本中多次出现这种模式。我想some text从分隔符中提取 。我怎样才能用正则表达式做到这一点?

例如,如果我有这个文本:

Lorem Ipsum 只是印刷和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商采用了一种类型的厨房并将 {# xxx #} 它打乱以使 {# zzz #} 成为类型样本书。它不仅经历了五个世纪,而且经历了电子排版的飞跃,基本保持不变。它在 1960 年代 {# xxx #} 与 {# zzz #} 发布了包含 Lorem Ipsum 段落的 Letraset 表,最近在 {# xxx #} 桌面出版软件如 Aldus PageMaker {# zzz #} 中得到普及,包括版本洛雷姆·伊普苏姆。

我想得到一个像这样的列表:

[it to make, with, desktop publishing software like Aldus PageMaker]

这是我的非工作代码:

>>> regex = re.compile(r'{# xxx #}.*({# zzz #}).*?')

>>> re.findall(regex, s) {# zzz #}

我认为我的困难是试图以非贪婪的方式制作正则表达式?

4

1 回答 1

2

?您只需在分隔符之间添加即可获得非贪婪行为。此外,你不应该.*?在最后。它什么也没做。{}是特殊字符,可能应该被转义。最后,括号需要围绕您要匹配的部分。这给了你这个模式:

 regex = re.compile(r'\{# xxx #\}(.*?)\{# zzz #\}')

要使用它,您需要一个使用类似 的循环m = re.match,然后用于m.group(1)获取第一个子组(括号中的部分)。您需要使用循环,而不是findall因为您只能获得子组的最后一个匹配项。

于 2013-03-08T11:44:48.033 回答