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

参考博客: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


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

很无解,后来尝试了

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);">这两种方式都正确

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 09:49:12

Python中的re.search和re.findall之间的区别的相关文章

iOS中NSNotification、delegate、KVO三者之间的区别与联系?

iOS中NSNotification.delegate.KVO三者之间的区别与联系? delegate.notification和KVO他们的功能比较类似,那么在实际的编程中,如何选择这些方式呢? 在开发ios应用的时候,我们会经常遇到一个常见的问题:在不过分耦合的前提下,controllers间怎么进行通信.在IOS应用不断的出现三种模式来实现这种通信: 1.委托delegation: 2.通知中心Notification Center: 3.键值观察key value observing,K

Python中内置数据类型list,tuple,dict,set的区别和用法

Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. (原链接:http://www.jb51.net/article/76339.htm) List 字面意思就是一个集合,在Python中List中的元素用中括号[]来表示,可以这样定义一个List: ? 1 L = [12, 'China', 19.998] 可以看到并不要求元素的类型都是一样的.当然也可以定

Python中的列表,元组,字符串之间的相互转化

Python中的列表元组和字符串之间的相互转化需要利用,tuple(),list(),str(). 示例如下: >>> the_string = "hello I'am xiaoli!" >>> #字符串转化为元组 >>> the_tuple = tuple(the_string) >>> the_tuple ('h', 'e', 'l', 'l', 'o', ' ', 'I', "'", 'a

在Python中,val、exec和 compile 有什么区别?

基本上 eval 上用来评估一个动态生成的 Python 表达式:exec 额外的用于执行动态生成的 python 代码. eval 和 exec 有以下两个差异 eval 只接受一个表达式,exec 可以接受一个包含了 python 语句的代码块: loops, try: except:, class 以及定义的函数和方法 Python 中的表达式是任何可以作为变量赋值中的值的表达式: a_variable = (任何你可以放在这个括号内的都是一个表达式) evale 返回表达式的值,而 ex

Python中:dict(或对象)与json之间的互相转化

在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import json导入. 在json模块有2个方法, loads():将json数据转化成dict数据 dumps():将dict数据转化成json数据 load():读取json文件数据,转成dict数据 dump():将dict数据转化成json数据后写入json文件 下面是具体的示例: dict字典转json数据 import json def dict_to_j

jquery中使元素显示和隐藏方法之间的区别

在实际的项目开发中,要使一个元素隐藏的方法有很多,比如css的多种属性和jquery的多种方法,虽然他们的作用都是使元素不可见,但是各个方法实现的原理是不一样的.下面主要介绍jquery各个元素隐藏方法之间的区别. 1.show()和hide() 使用hide()方法隐藏元素实际上是同时减少元素的高度.宽度以及不透明度,直到这三个属性为0,最后设置元素的css属性disolay:none.show()方法从上到下增大元素的高度,从左到右增大元素的宽度,同时增加内容的不透明度,直至元素完全显示.

Java-Java中System.arraycopy() 和 Arrays.copyOf()两者之间的区别

如果我们想拷贝一个数组,我们可能会使用System.arraycopy()或者Arrays.copyof()两种方式.在这里,我们将使用一个比较简单的示例来阐述两者之间的区别. 1.示例代码: System.arraycopy() int[] arr = {1,2,3,4,5}; int[] copied = new int[10]; System.arraycopy(arr, 0, copied, 1, 5);//5 is the length to copy System.out.print

Flask中g对象,以及g,session,flash之间的区别

一.g对象的使用 专门用来存储用户信息的g对象,g的全称的为global g对象在一次请求中的所有的代码的地方,都是可以使用的 g对象的使用: 设置:g.变量名= 变量值 获取:g.name 注意:g对象比如说再a路由设置只能再a路由中去到g对象,在b路由汇总没法获得g对象 二.g,session,flash之间的区别 session 只要设置,在任意请求中都能拿到,无论你拿多少次 flash 一旦设置,可在任意一次请求中获取,但是只能取一次 g 在A路由中设置设置,只能在A路由请求中请求中获取

python 中sys.stdout.write 和 print &gt;&gt; sys.stdout的区别

print >> sys.stdout的形式就是print的一种默认输出格式,等于print "%VALUE%" 看下面的代码的英文注释,是print的默认帮助信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # coding=utf-8 import sys, os list1Display = ['1', '2', '3'] list2Display = ['abc', 'def', 'rfs'] while list2Displ