免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21210 | 回复: 3
打印 上一主题 下一主题

【已解决】关于正则匹配的re.search和re.findall的差别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-17 18:52 |只看该作者 |倒序浏览
正在做个蜘蛛
需要用到正则表达式

如果用
m = re.search(r"<\s*a\s.*?href\s*=。。。。。。。", s)
print m.group(0)
结果:<a href="http://www.qidian.com" target="_blank" class="topnav">起点首页</a>



m = re.findall(r"<\s*a\s.*?href\s*=。。。。。。。", s)
print m
结果:[('', '', '"http://www.qidian.com"', '\xc6\xf0\xb5\xe3\xca\xd7\xd2\xb3'), ('', '', '"http://www.qidian.com"', '\xbc\xf2')……省略]

m = re.findall(r"<\s*a\s.*?href\s*=。。。。。。。", s)
print m[0]#取其中一个
结果:('', '', '"http://www.qidian.com"', '\xc6\xf0\xb5\xe3\xca\xd7\xd2\xb3')



1.为啥search和findall的结果是不一样的(不考虑数量差别和编码差别)?
2.我想用search的结果,但是怎么让他像findall一样全部显示?循环要怎么写?

补充
刚才这么测试了下
m = re.search(r"<\s*a\s.*?href\s*=。。。。。。。", s)
print m.groups()
结果(None, None, '"http://www.qidian.com"', '\xc6\xf0\xb5\xe3\xca\xd7\xd2\xb3')
怎么又和findall一样了?

[ 本帖最后由 advancejar 于 2009-12-17 21:37 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-12-17 20:49 |只看该作者
#多次循环
p = re.compile(r'adsfsadf')
a=p.finditer(s)
for i in a:
    print i.group()

论坛徽章:
0
3 [报告]
发表于 2009-12-17 21:37 |只看该作者
谢谢,你写的很专业。我刚研究出来是这么写的,也贴下
for match in re.finditer(r"<\s*a\s.*?href……", s):
    print match.group(0)
    print match.group(1)
    print match.group(2)
给后来人看看吧

论坛徽章:
0
4 [报告]
发表于 2012-11-16 15:11 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP