我有一些文字,其中一些文字由以下分隔:
{# xxx #} some text {# zzz #}
我的文字中出现过很多这种模式。我想从分隔符中提取some text
。我怎么能用正则表达式做到这一点?
例如,如果我有这个文字:
Lorem Ipsum只是印刷和排版行业的虚拟文本。自16世纪以来,Lorem Ipsum一直是业界标准的虚拟文本,当时一台未知的打印机采用了类型的厨房并且混乱{#xxx#}它使{#zzz#}成为一种类型的标本书。它不仅存在了五个世纪,而且还延续了电子排版,基本保持不变。它在20世纪60年代推出{#xxx#},{#zzz#}发布包含Lorem Ipsum段落的Letraset表格,最近发布了包含Lldm Ipsum段落的{#xxx#}桌面出版软件,包括版本的Aldus PageMaker {#zzz#} Lorem Ipsum。
我希望得到一个列表:
[it to make, with, desktop publishing software like Aldus PageMaker]
这是我的非工作代码:
>>> regex = re.compile(r'{# xxx #}.*({# zzz #}).*?')
>>> re.findall(regex, s) {# zzz #}
我认为我的困难是试图以非贪婪的方式制作正则表达式?
答案 0 :(得分:2)
只需在分隔符之间添加?
即可获得非贪婪行为。此外,您最后不应该有.*?
。它没有做任何事情。 {}
是特殊字符,可能应该被转义。最后,括号需要在您想要匹配的部分周围。这给你这种模式:
regex = re.compile(r'\{# xxx #\}(.*?)\{# zzz #\}')
要使用它,您需要一个使用m = re.match
之类的循环,然后使用m.group(1)
来获取第一个子组(括号中的部分)。您需要使用循环而不是findall
,因为您只能获得子组的最后一个匹配。