猿问

re.search() 和 re.findall() 在查找正则表达式模式 (Python)

我的问题的演示如下:


我的代码:


p = "goalgoalgoalgoalllllgoaloaloal'


print(re.search('g(oal){3}',p).group())


re.findall('g(oal){3}',p)

输出:


goaloaloal

['oal']

使用相同的正则表达式模式,re.search() 发现匹配是我预期的 'goalaloal'。然而,re.findall()发现匹配是'oal',这真的让我感到惊讶。任何人都可以帮助解释差异的原因吗?先感谢您:-)


说明:对于看似重复的内容,我们深表歉意。我这个问题的最初目的是在处理正则表达式模式中的括号时找到 re.research() 和 re.findall() 方法之间的确切区别。之前我什至不知道“捕获”这个词。更具体地说,我想知道如何使用 re.findall() 方法准确提取“目标”模式。


幕布斯7119047
浏览 109回答 2
2回答

www说

这是因为re.findall()当有捕获组时只返回捕获组中的子字符串,而re.search()返回一个Match对象,并且当您调用对象的group()方法时Match,它返回匹配整个正则表达式的子字符串,而不管捕获组。如果要re.findall()返回整个匹配的子字符串,则应改用非捕获组:re.findall('g(?:oal){3}', p) # returns ['goaloaloal']
随时随地看视频慕课网APP

相关分类

Python
我要回答