你如何只捕获python正则表达式中最外层的匹配(扔掉组)?

时间:2018-06-01 21:22:36

标签: python regex

如果这是一个重复的问题,我道歉,但我试了一会儿,无法弄清楚要使用什么搜索。

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

example_re = re.compile(r'[\(\[].*?[\)\]]')

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

我修好了它:

example_re = re.compile(r'(\(.*?\))|(\[.*?\])')

但现在,当我调用example_re.findall(text)时,测试正在破坏,因为第一个表达式返回一个字符串列表,第二个返回一个元组列表,只要有一个嵌套表达式[如(this)]

如何解决这个问题,以便findall返回只有最外面的匹配?

编辑:将此问题标记为重复的人确实无法帮助任何人。这个被认为是重复的问题的标题是'Python re.findall表现得很奇怪'。我(或其他任何人)应该如何找到它?仅仅因为我用不同的方式表达了这个问题,这使得它不重复。

1 个答案:

答案 0 :(得分:-1)

您需要更改模式,以便没有两个捕获组。如果你有两个组,你将得到一个2元组的匹配字符串,即使其中一个是空的。

一个简单的解决方法是使您的群组无法捕获,而(?: )代替普通( )

example_re = re.compile(r'(?:\(.*?\))|(?:\[.*?\])')