如果这是一个重复的问题,我道歉,但我尝试了一段时间,但不知道使用什么搜索。
以前,我有一个正则表达式:
example_re = re.compile(r'[\(\[].*?[\)\]]')
它应该捕获(看起来像这样的文本)和这个,但也会错误地捕获[看起来像这样]的文本。
我修复了它:
example_re = re.compile(r'(\(.*?\))|(\[.*?\])')
但是现在,当我调用example_re.findall(text)时,测试就中断了,因为只要有像(this)这样的嵌套表达式,第一个表达式就会返回一个字符串列表,第二个表达式就会返回一个元组列表。
我如何解决这个问题,使findall返回只有最外层的匹配?
编辑:,无论谁把这个问题标记为重复的,他真的对任何人都没有帮助。这个问题的标题应该是“Python re.findall行为怪异”。我(或其他人)该如何找到它呢?仅仅因为我用不同的方式表达了这个问题,所以它就不是重复的。
发布于 2018-06-02 05:35:30
你需要改变你的模式,这样你就不会有两个捕获组。当你有两个组时,你会得到一个2元组的匹配字符串,即使其中一个是空的。
一个简单的解决办法是使用(?: )
而不是普通的( )
使您的组不被捕获
example_re = re.compile(r'(?:\(.*?\))|(?:\[.*?\])')
https://stackoverflow.com/questions/50651146
复制相似问题