我有一些文本,其中一些文本由以下部分分隔:
{# xxx #} some text {# zzz #}在我的文本中,这个模式出现了很多次。我想从分隔符中提取some text。如何使用正则表达式完成此操作?
例如,如果我有这样的文本:
Lorem Ipsum只是印刷和排版行业的虚拟文本。自15世纪以来,Lorem Ipsum一直是行业标准的虚拟文本,当时一家未知的打印机拿出了一个排版,并将其打乱,使{# zzz #}成为了一个排版样本簿。它不仅存活了五个世纪,还经历了电子排版的飞跃,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset sheets的发布而流行起来,最近又随着包括Lorem Ipsum版本的Aldus PageMaker这样的桌面出版软件而流行。
我想要一个这样的列表:
[it to make, with, desktop publishing software like Aldus PageMaker]下面是我的非工作代码:
>>> regex = re.compile(r'{# xxx #}.*({# zzz #}).*?')
>>> re.findall(regex, s) {# zzz #}
我想我的困难是试图以一种非贪婪的方式创建正则表达式?
发布于 2013-03-08 19:44:48
只需在分隔符之间添加?,就可以获得非贪婪行为。此外,您不应该在最后使用.*?。它什么也做不了。{}是特殊字符,应该对其进行转义。最后,括号需要包含在要匹配的部分周围。这就给了你这样的模式:
regex = re.compile(r'\{# xxx #\}(.*?)\{# zzz #\}')要使用它,您需要一个使用类似m = re.match的循环,然后使用m.group(1)获取第一个子组(括号中的部分)。您需要使用循环而不是findall,因为您只能获取子组的最后一个匹配项。
https://stackoverflow.com/questions/15293194
复制相似问题