python爬虫笔记之re.match匹配,与search、findall区别

为什么re.match匹配不到?re.match匹配规则怎样?(捕一下seo) 

 

re.match(pattern, string[, flags])

pattern为匹配规则,即输入正则表达式。

string为,待匹配的文本或字符串。

网上的定义【 从要匹配的字符串的头部开始,当匹配到string的尾部还没有匹配结束时,返回None; 
当匹配过程中出现了无法匹配的字母,返回None。】 

但我觉得要强调关键一句【仅从要匹配的字符串头部开始匹配!】

看看例子,你就明白了!!!想用的话,一定要看!

出现<_src.SRE_Match object at .....>表示匹配成功。

出现None表示,匹配失败或未匹配到。

 

总结:re.match只从待匹配的字符串或文本的开头开始匹配,即如果匹配的字符串不在开头,而是在中间或结尾,则无法匹配!

 

———————————————————分割线——————————————————

顺便对比下re.match、re.search、re.findall的区别

 

match()函数只在string的开始位置匹配(例子如上图)。

 

search()会扫描整个string查找匹配,会扫描整个字符串并返回第一个成功的匹配。

 

 

 re.findall()将返回一个所匹配的字符串的字符串列表

 

 

 ———————————————————分割线——————————————————

 

《用python写网络爬虫》中1.4.4链接爬虫中,下图为有异议代码

 这里的输出经测试,根本啥也没有,如下图

查了很久,应该是因为re.match一直匹配不到数据引起的,毕竟他只匹配开头。

将re.match改为re.search,再测试,可正常下载

 

分析:可能是由于书编写时,http://example.webscraping.com/页面所带的链接都是:/index/1、/index/2……且输入匹配表达式为  【   /(index/view)   】,使用的是re.match匹配,如果匹配上述的url则没问题,而现在该网站页面所带的链接为:/places/default/index/1、/places/default/index/2……所以,上文讲到的re.match的特点,从开头开始匹配,则这时候re.match就会一直匹配不上!我将它换位re.search就可以解决这个问题了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

如有错误,麻烦及时指正,谢谢!

转载于:https://www.cnblogs.com/4wheel/p/8526525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值