您的位置:首页 > 编程语言 > Python开发

Python中的re.search和re.findall之间的区别2

2015-07-27 17:48 821 查看
我好像已经有点懂findall[0],后面的[0]是什么意思了,因为今天刚巧修改了各种错误,接下来通过代码讲解

网页源码:

<li id="1671" test="0" deg="0" >
	<div class="lessonimg-box">
			
		
		<a href="http://www.jikexueyuan.com/course/1671.html" target="_blank" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24">
			<img src="http://a1.jikexueyuan.com/home/201507/23/6d26/55b0460f2db0e.jpg" class="lessonimg" title="AFNetworking 2.x 网络解析详解" alt="AFNetworking 2.x 网络解析详解">
			
			<div class="lessonplay" style="opacity: 0;">
				<i class="playericon" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24"></i>
			</div>
			

		</a>
		
	</div>

	<div class="lesson-infor" style="height: 88px;">
		<h2 class="lesson-info-h2"><a href="http://www.jikexueyuan.com/course/1671.html" target="_blank" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24">AFNetworking 2.x 网络解析详解</a></h2>
		<p style="height: 0px; opacity: 0; display: none;">
			本课程将会带领大家使用 iOS 开源库中排名第一的 AFNetworking 2.x 网络请求库,包括讲解基本的 GET、POST 请求的使用,文件(图片)上传,断点下载等知识。最后会分享 AFNetworking 2.x 设计精良的地方。
		</p>
		<div class="timeandicon">
			<div class="cf">
				<dl>
					<dd class="mar-b8"><i class="time-icon"></i><em>6课时
							55分钟</em>
					</dd>
					<dd class="zhongji">
						
					<i class="xinhao-icon2"></i><em>中级</em>
					</dd>
					
				</dl>
				<em class="learn-number">2313人学习</em>
			</div>
			<div class="cf">
				<div class="lessonicon-box">
					
					<a href="http://www.jikexueyuan.com/course/ios/">
						<img width="16" src="http://a1.jikexueyuan.com/home/201411/04/3567/5457df3530e14.png" alt="ios" title="iOS" jktag="&posGP=101001&posArea=0002&posOper=2005&aCId=1671&posColumn=1671.1&aCCate=ios" >
					</a>
					
				</div>
			</div>
		</div>
	</div>
</li>


可知:在标签对<li></li>中,有两对<div></div>标签

正则表达式:
def getinfo(self,eachclass):
        div0 = re.search('(<div.*?</div>)',eachclass,re.S).group(0)
        div2 = re.search('(<div.*?</div>)',eachclass,re.S).group(1)
        div = re.findall('(<div.*?</div>)',eachclass,re.S)[0]
        div1 = re.findall('(<div.*?</div>)',eachclass,re.S)[1]
        print 'div:'+div
        print 'div1:'+div1
        print 'div0:'+div0
        print 'div2:'+div2


输出:

div:<div class="lessonimg-box">
			
		
		<a href="http://www.jikexueyuan.com/course/1671.html" target="_blank" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24">
			<img src="http://a1.jikexueyuan.com/home/201507/23/6d26/55b0460f2db0e.jpg" class="lessonimg" title="AFNetworking 2.x 网络解析详解" alt="AFNetworking 2.x 网络解析详解">
			
			<div class="lessonplay" style="opacity: 0;">
				<i class="playericon" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24"></i>
			</div>
div1:<div class="lesson-infor" style="height: 88px;">
		<h2 class="lesson-info-h2"><a href="http://www.jikexueyuan.com/course/1671.html" target="_blank" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24">AFNetworking 2.x 网络解析详解</a></h2>
		<p style="height: 0px; opacity: 0; display: none;">
			本课程将会带领大家使用 iOS 开源库中排名第一的 AFNetworking 2.x 网络请求库,包括讲解基本的 GET、POST 请求的使用,文件(图片)上传,断点下载等知识。最后会分享 AFNetworking 2.x 设计精良的地方。
		</p>
		<div class="timeandicon">
			<div class="cf">
				<dl>
					<dd class="mar-b8"><i class="time-icon"></i><em>6课时
							55分钟</em>
					</dd>
					<dd class="zhongji">
						
					<i class="xinhao-icon2"></i><em>中级</em>
					</dd>
					
				</dl>
				<em class="learn-number">2331人学习</em>
			</div>
div0:<div class="lessonimg-box">
			
		
		<a href="http://www.jikexueyuan.com/course/1671.html" target="_blank" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24">
			<img src="http://a1.jikexueyuan.com/home/201507/23/6d26/55b0460f2db0e.jpg" class="lessonimg" title="AFNetworking 2.x 网络解析详解" alt="AFNetworking 2.x 网络解析详解">
			
			<div class="lessonplay" style="opacity: 0;">
				<i class="playericon" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24"></i>
			</div>
div2:<div class="lessonimg-box">
			
		
		<a href="http://www.jikexueyuan.com/course/1671.html" target="_blank" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24">
			<img src="http://a1.jikexueyuan.com/home/201507/23/6d26/55b0460f2db0e.jpg" class="lessonimg" title="AFNetworking 2.x 网络解析详解" alt="AFNetworking 2.x 网络解析详解">
			
			<div class="lessonplay" style="opacity: 0;">
				<i class="playericon" jktag="&posGP=103001&posArea=0002&posOper=2004&aCId=1671&posColumn=1671.24"></i>
			</div>


div0,div2属于search组

div,div1属于findall组

结果很明显,findall后的[0]和[1]就像是数组下标,而且能准确识别出所有的div标签对

然而,search并不能识别出所有的div标签对,而且group(0)和group(1)的结果相同,都只能识别出第一个div标签对

到这里,或许有人会想如果是group(2)呢?

我当然也尝试了,

div3 = re.search('(<div.*?</div>)',eachclass,re.S).group(2)

结果报错了,见插图


因此,建议多用findall
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: