时间过得可真快。一眨眼,离上次学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