正则.*与.*?的区别

问题描述:

在分析提取html中的信息时有时会用到正则表达式,什么时候用 .* ,什么时候用 .*? ,表示很困惑,接下来用例子来说明。


示例

import re

html = "<h2>TXT文本</h2><h2>word文档</h2>"

reg1 = re.findall(r'<h2>(.*?)</h2>', html)
print(".*?匹配示例:", reg1)  # .*?示例

reg2 = re.findall(r'<h2>(.*)</h2>', html)
print(".*匹配示例:", reg2)  # .*示例

结果:

.*?匹配示例: [‘TXT文本’, ‘word文档’]
.*匹配示例: [‘TXT文本</h2><h2>word文档’]


解释说明

(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配,意思就是每一次匹配的内容尽可能少,第一次遇到结尾字段就会切分,每一次匹配都不贪多。

(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配,意思就是每次匹配的内容会一直检索到更后面,只要更后面能匹配到结尾字段,哪怕中间也有结尾字段也会一直匹配下去直到遇到最后一次结尾字段,每一次匹配都尽可能贪最多的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值