正则问题~!

正则问题~!

# 具体遇到的问题
老师,选择练习中的这道题,使用findall只能拿到最后一对数字['3589 '],请问如何使用findall拿到3.1415 9265 3589?还有,老师请问search方法中,group和groups的区别?谢谢~

def test(data):
    result = re.findall("^[3]\.(\d{1,4}\s){3}", data)
    print(result)

if __name__ == '__main__':
    data = '3.1415 9265 3589 7932 3846'
    test(data)

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好,

1、findall函数:如果有分组,仅仅匹配分组里面的内容,然后返回这个组的列表。因此会是同学看到的结果

2、同学可以使用search和group实现

http://img1.sycdn.imooc.com//climg/5f967d8c0960303507950505.jpg

3、search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

4、m.group(N) 返回第N组括号匹配的字符。m.group()和m.group(0) 是所有匹配的字符

     m.groups() 返回所有括号匹配的字符,以tuple格式。

http://img1.sycdn.imooc.com//climg/5f967f4d0970e9fb07750340.jpg

  • 五栋一哥 提问者 #1
    你好,在这个题里,有分组的情况下,{3}是匹配3个,为什么只会返回含有一个元素的列表?不是应该返回符合条件的三个字符串组成的列表吗?
    2020-10-26 15:59:35
  • 好帮手慕美 回复 提问者 五栋一哥 #2
    同学,你好。{3}并没有在括号中,因此不会有3个字符串,只会显示最后匹配到的字符串,同学可以将括号中要匹配的内容写3遍即可得到三个元素的列表。祝学习愉快~~~~
    2020-10-26 16:34:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师