如果这是一个重复的问题,我道歉,但我试了一会儿,无法弄清楚要使用什么搜索。
以前,我有一个正则表达式:
example_re = re.compile(r'[\(\[].*?[\)\]]')
应该捕获(看起来像这样的文本)和[this],但也会错误地捕获[看起来像这样的文本]。
我修好了它:
example_re = re.compile(r'(\(.*?\))|(\[.*?\])')
但现在,当我调用example_re.findall(text)时,测试正在破坏,因为第一个表达式返回一个字符串列表,第二个返回一个元组列表,只要有一个嵌套表达式[如(this)]
如何解决这个问题,以便findall返回只有最外面的匹配?
编辑:将此问题标记为重复的人确实无法帮助任何人。这个被认为是重复的问题的标题是'Python re.findall表现得很奇怪'。我(或其他任何人)应该如何找到它?仅仅因为我用不同的方式表达了这个问题,这使得它不重复。
答案 0 :(得分:-1)
您需要更改模式,以便没有两个捕获组。如果你有两个组,你将得到一个2元组的匹配字符串,即使其中一个是空的。
一个简单的解决方法是使您的群组无法捕获,而(?: )
代替普通( )
:
example_re = re.compile(r'(?:\(.*?\))|(?:\[.*?\])')