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

时间:2022-04-26 20:23:58

参考博客:http://www.crifan.com/python_re_search_vs_re_findall/

在这里,我想说一下我目前遇到的问题

这是一个本地的文件 text.txt

<html>
<head>
<title>极客学院爬虫测试</title>
</head>
<body>
<div class="topic"><a href="http://jikexueyuan.com/welcome.html">欢迎参加《Python定向爬虫入门课程》</a>
<div class="list">
<ul>
<li><a href="http://jikexueyuan.com/1.html">这是第一条</a></li>
<li><a href="http://jikexueyuan.com/2.html">这是第二条</a></li>
<li><a href="http://jikexueyuan.com/3.html">这是第三条</a></li>
</ul>
</div>
</div>
</body>
</html>
当我用re.findall()来获取它的文本内容,即
 <li><a href="http://jikexueyuan.com/1.html">这是第一条</a></li>
中<a>标签直接的内容时,用了如下代码,采用先打后小原则:
<pre name="code" class="python">text_field = re.findall('<ul>(.*?)</ul>',html,re.S)
text = re.findall('">(.*?)</a></li>',text_field,re.S)for each in text: print each

应该没问题的,但是报了这样的错 

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

很无解,后来尝试了

1.

text_field = re.findall('<ul>(.*?)</ul>',html,re.S)[0]
2.
text_field = re.search('<ul>(.*?)</ul>',html,re.S).group(1)<pre style="font-family: Consolas; font-size: 10.5pt; background-color: rgb(255, 255, 255);">这两种方式都正确

 

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

但是我并不懂。后来看到开头那篇博客的最后提到的,我很有同感。此时,我猜想,当findall得到的元素是一个元组,但是这个元组仅有一个时,需要像search那样给定位置。

但是现在我不知道具体是什么情况时要这样写。希望哪位大神不吝赐教!