为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯7119047 2021-06-06 11:55:21
我的问题的演示如下:我的代码: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() 方法准确提取“目标”模式。
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

这是因为re.findall()当有捕获组时只返回捕获组中的子字符串,而re.search()返回一个Match对象,并且当您调用对象的group()方法时Match,它返回匹配整个正则表达式的子字符串,而不管捕获组。

如果要re.findall()返回整个匹配的子字符串,则应改用非捕获组:

re.findall('g(?:oal){3}', p) # returns ['goaloaloal']


查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信