首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配非贪婪正则表达式分隔符

匹配非贪婪正则表达式分隔符
EN

Stack Overflow用户
提问于 2013-03-08 19:42:15
回答 1查看 615关注 0票数 0

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

代码语言:javascript
复制
{# xxx #} some text {# zzz #}

在我的文本中,这个模式出现了很多次。我想从分隔符中提取some text。如何使用正则表达式完成此操作?

例如,如果我有这样的文本:

Lorem Ipsum只是印刷和排版行业的虚拟文本。自15世纪以来,Lorem Ipsum一直是行业标准的虚拟文本,当时一家未知的打印机拿出了一个排版,并将其打乱,使{# zzz #}成为了一个排版样本簿。它不仅存活了五个世纪,还经历了电子排版的飞跃,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset sheets的发布而流行起来,最近又随着包括Lorem Ipsum版本的Aldus PageMaker这样的桌面出版软件而流行。

我想要一个这样的列表:

代码语言:javascript
复制
[it to make, with, desktop publishing software like Aldus PageMaker]

下面是我的非工作代码:

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

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

我想我的困难是试图以一种非贪婪的方式创建正则表达式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 19:44:48

只需在分隔符之间添加?,就可以获得非贪婪行为。此外,您不应该在最后使用.*?。它什么也做不了。{}是特殊字符,应该对其进行转义。最后,括号需要包含在要匹配的部分周围。这就给了你这样的模式:

代码语言:javascript
复制
 regex = re.compile(r'\{# xxx #\}(.*?)\{# zzz #\}')

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15293194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档