findall与match、search区别及小括号的注意事项

一、问题起源:

需求:从文本中寻找所有的IP地址;
假设文本字符串:test = “xxx123.3.2.3abd 23.2.3.3”
IP正则表达式:((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)
直接使用re.findall(pattern, test)没有输出预期结果,如图所示:
在这里插入图片描述

二、寻找答案

1、定位正则表达的正确与否

使用search与match均能输出正确的结果
在这里插入图片描述
结论:1、match一定是起始处开始匹配,search可以从任意位置进行匹配;正则表达式是正确的

2、当把括号全部展开时, 会怎么样

在这里插入图片描述
结论:没有括号时是可以找出所有的IP

3、findall与小括号有什么关系呢

百度搜索得到如下结论:
发现findall在正则表达式有括号和没有括号的情况下,结果不同
在正则表达式有一个括号的时候,仅仅匹配括号内的内容
当有两个括号时,它会分别匹配括号由内向外的内容,经结果存在元组中再给列表
找到一个解决办法,用(?:re)的方法来去除组
结论:原来findall匹配的时候会仅仅返回括号内的内容

三、正确的答案

使用?:忽略括号内的匹配
在这里插入图片描述

四、结论

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值