python正则中的贪婪匹配与非贪婪匹配

正则表达式是处理字符串的强大工具,它有自己的特定语法结构,其中常用的贪婪匹配与非贪婪匹配是一个难点,下面以代码为例进行解释说明

请看下面这个例子
我们想获取字符串中间的数字,中间写的(\d+),数字两边用.*替代,看看运行结果。

content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$',content)
print(result)
print(result.group(1))

输出结果为:
在这里插入图片描述
我们只获取到了7这个数字,因为在贪婪模式下,.*会匹配尽可能多的字符并没有指定有多少个字符,所以把123456匹配了,给\d+留下一个满足条件的7。
我们改动一下

content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*?(\d+).*Demo$',content)
print(result)
print(result.group(1))

这样就匹配成功了
在这里插入图片描述
但是这里要注意,如果匹配字符串在结尾字符串,.*?就有可能匹配不到任何内容,因为它会匹配尽可能少的字符

content = 'http://weibo.com/comment/kEraCN'
result1 = re.match('http.*?comment/(.*?)',content)
result2 = re.match('http.*?comment/(.*)',content)
print('result1',result1.group(1))
print('result2',result2.group(1))

在这里插入图片描述
可以观察到,.*?没有匹配到任何结果,而.*则尽可能匹配更多的内容,成功得到了匹配结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值