首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python regex中只捕获最外层的匹配(丢弃组)?

如何在python regex中只捕获最外层的匹配(丢弃组)?
EN

Stack Overflow用户
提问于 2018-06-02 05:22:36
回答 1查看 612关注 0票数 -1

如果这是一个重复的问题,我道歉,但我尝试了一段时间,但不知道使用什么搜索。

以前,我有一个正则表达式:

代码语言:javascript
复制
example_re = re.compile(r'[\(\[].*?[\)\]]')

它应该捕获(看起来像这样的文本)和这个,但也会错误地捕获[看起来像这样]的文本。

我修复了它:

代码语言:javascript
复制
example_re = re.compile(r'(\(.*?\))|(\[.*?\])')

但是现在,当我调用example_re.findall(text)时,测试就中断了,因为只要有像(this)这样的嵌套表达式,第一个表达式就会返回一个字符串列表,第二个表达式就会返回一个元组列表。

我如何解决这个问题,使findall返回只有最外层的匹配?

编辑:,无论谁把这个问题标记为重复的,他真的对任何人都没有帮助。这个问题的标题应该是“Python re.findall行为怪异”。我(或其他人)该如何找到它呢?仅仅因为我用不同的方式表达了这个问题,所以它就不是重复的。

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 05:35:30

你需要改变你的模式,这样你就不会有两个捕获组。当你有两个组时,你会得到一个2元组的匹配字符串,即使其中一个是空的。

一个简单的解决办法是使用(?: )而不是普通的( )使您的组不被捕获

代码语言:javascript
复制
example_re = re.compile(r'(?:\(.*?\))|(?:\[.*?\])')
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50651146

复制
相关文章

相似问题

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