Python: 贪婪匹配与非贪婪匹配

时间过得可真快。一眨眼,离上次学python爬虫已经是1年零1个月了。

最近,突然 ^_^ ,想干点老本行,爬点美女图片瞅瞅~~

but 以前学过的基本都忘完了。好在“拾起来”还不算太困难。
 

贪婪匹配与非贪婪匹配。

就好比一个男人,一个渣男心里想的,老子就要全天下所有的女人。

而像我这种老实人,只想对喜欢自己的人好。

所以,这里的我就是非贪婪。而渣男就是贪婪的。即贪婪:想要的更多,尽可能多的占有。


言归正传,看看python是怎么用的re模块:

这里有这样一个字符串:

1.贪婪匹配: .*

这里看到,只匹配到了7,是不是和第一眼看去猜测的不一样?

在贪婪匹配下, .*会匹配尽可能多的字符.上图代码中 \d+ 就是至少一个数字并没有具体指定多少个数字。因此.*就会匹配尽可能多的数字,又因为\d后有个+是至少一个的意思。所以,贪婪后就只留下了7.

2.非贪婪匹配: .*?

非贪婪匹配,即上图所示,.*后加了一个?就转变为非贪婪匹配。其结果是:

可以想象,.*?是老实人说,我不能要你太多钱, 你尽量都拿回去吧。 \d+ 又是至少一个数字,所以当然就照单全收了。

所以注意,谁是贪婪的,我们又要group(n)拿到贪婪的还是剩下的。

总结:贪婪匹配是尽可能匹配多的字符,非贪婪匹配 就是尽可能匹配少的字符

学习不枯燥,却也寂寥。。。

 


扩展:主要的修饰符

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(local-aware)匹配
re.M多行匹配,影响^和$
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符.影响了\w \W \b \B
re.X通过给予更灵活的格式以便于将正则表达式写的更易于理解

网页匹配中,用的较多的是re.I re.S

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒不了的星期八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值