2017-04-11

学习python,免不了应对爬虫,初学爬虫最难理解的就是正则表达式。

比如我们要爬去网页上的某些内容,就像下面这种形式:

<p>safdsf</p><p>sdhjrth</p>

我们要提取标签内的内容,可以尝试来一次正则提取:

>>>s="<p>safdsf</p><p>sdhjrth</p>"

print(re.findall(r'<p>(.*)</p>',s)),这里我们使用findall方法,大家可以思考一下输出的结果,

['safdsf</a><a>sdhjrth']结果有点不尽人意,并没有将<p>标签完全去掉。这就要涉及到贪婪与非贪婪模式了,简单点来说就是一个?的问题

修改过后:

print(re.findall(r'<a>(.*?)</a>',s))

['safdsf', 'sdhjrth']

这样输出的结果就比较符合我们的要求了。所以正则表达式是非常值得研究的

下面介绍正则表达式的几个常用方法;

1,match()方法

大家不妨实验一下match()的方法,这里就简单说一下

>>>p=re.compile(r'[a-z]+')

首先我们先匹配一下,从字母a到z,

>>>print(p.match('345sdf5ggd6fg'))
输出:None

这里我们可以看到输出的结果是none,这是因为match()从字符串的第一位开始匹配,如果第一位不是字母,那么它就不会继续匹配下去。

>>>print(p.match('a345sdf5ggd6fg'))

<_sre.SRE_Match object; span=(0, 1), match='a'>

也就是说只要第一位不是字母,就无法匹配成功。大家可以看一下将p=re.compile(r'[a-z]+')后面的加号换成* 或者去掉。

p=re.compile(r'[a-z]+')

print(p.match('abcasd'))     结果:<_sre.SRE_Match object; span=(0, 6), match='abcasd'>

去掉之后

  p=re.compile(r'[a-z]')

pritn(p.match('abcasd'))  结果:  <_sre.SRE_Match object; span=(0, 1), match='a'>

这里的加号代表

匹配前面的子表达式一次或多次,关于正则表达的所有符号大家自己百度。

2..search()方法

关于search()方法,看上去就比 match更加完美了。

它没有match()只在第一位匹配的限制了。

>>>p=re.compile(r'[a-z]+')

>>>print(m=p.search('234abc'))

结果:<_sre.SRE_Match object; span=(3, 6), match='abc'>

的确是比match()方法好,主要看个人的实际应用。

3.finditer()方法

finditer() 则是将匹配对象作为一个迭代器返回,举个简单的例子吧。

p=re.compile(r'\d+')
for a in p.finditer('今天是4月11号'):
print(a.group(),a.span()) 4 (3, 4)
11 (5, 7)

4.findall()方法

与finditer不同的是,findall()方法返回的是一个列表,和search() match()一样。

5.返回的方法

group() 返回匹配的字符串
start() 返回匹配的开始位置
end() 返回匹配的结束位置
span() 返回一个元组表示匹配位置(开始,结束)

正则表达式的高级方法这里就不多说了,会在近期的文章中一一探讨。(大神勿喷)

python 正则基本方法的更多相关文章

  1. Python正则式的基本用法

    Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...

  2. Python正则匹配字母大小写不敏感在读xml中的应用

    需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...

  3. python字符串的方法

    python字符串的方法 ############7个基本方法############ 1:join def join(self, ab=None, pq=None, rs=None): # real ...

  4. Python正则替换字符串函数re.sub用法示例(1)

    本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...

  5. python 正则进阶常用方法

    表达式 描述 正则表达式示例 符号 literal 匹配文本字符串的字面值literal foo rel1|rel2 匹配正则表达式rel1或rel2 foo|bar . 匹配任何字符(除了\n之外) ...

  6. 认识python正则模块re

    python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...

  7. python 正则相关函数全解析

    前言:网上有很多关于python正则函数的方法说明,这里尽可能用最简单的demo把所有函数之间的逻辑关系说清楚,供参考. 1.最原始的 re.compile()这个函数一般是需要和其它函数一起使用的, ...

  8. Python测试函数的方法之一

    Python测试函数的方法之一 首先介绍简单的try......except尝试运行的放例如下面的图和代码来简单介绍下: 注释:提醒以下代码环境为2.7.x 请3.x以上的同学们老规矩print(把打 ...

  9. 使用python原生的方法实现发送email

    使用python原生的方法实现发送email import smtplib from email.mime.text import MIMEText from email.mime.multipart ...

随机推荐

  1. zookeeper 杂记

    Zookeeper为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得Zookeeper不能用于存放大量的数据,每个节点的存放数据上限为1M.

  2. js如何判断哪个按钮被点击了?

    用事件委托,然后判断target,代码如下: $(docuement).on('click',function(event){ event.target... }) 例如:点击.c1之外任意地方的时候 ...

  3. synchronized使用

    在一个方法内部使用如下代码: public void m5() { synchronized (Test1.class) { System.out.println("m5"); t ...

  4. Python+Flash+NodeJS 接口自动化平台

    一.前端安装步骤# manager-web(1)下载项目 git clone https://github.com/t880216t/manager-web.git (2) 安装依赖 cnpm ins ...

  5. Win7 开机自动启动Outlook2010

    工作中,设置一些开机启动项,可以提供工作效率,下面演示设置Outlook2010在win7系统开机自启动,其它软件,如Eclipse.微信等,也可以这么配置. 环境: win7,outlook 201 ...

  6. dedecms前端无法调用自定义变量怎么解决

    网友问ytkah说他的dedecms前端无法调用自定义变量要怎么解决,登录他的网站后台看了一下,自定义变量已经添加了,也写入了数据库表中,但是就是前台没办法调用出来,后面想想可能是文件权限不够,具体是 ...

  7. finecms栏目文章页seo设置

    finecms栏目页和文章页默认的标题是页面title_二级栏目title_一级栏目title_网站名称(比如:finecms怎么设置标题_finecms二次开发_finecms_ytkah博客),如 ...

  8. PHP 生成器入门

    https://juejin.im/entry/5b4c2d76f265da0f697029ad PHP 在 5.5 版本中引入了「生成器(Generator)」特性,不过这个特性并没有引起人们的注意 ...

  9. (转)redis分布式锁-SETNX实现

    Redis有一系列的命令,特点是以NX结尾,NX是Not eXists的缩写,如SETNX命令就应该理解为:SET if Not eXists.这系列的命令非常有用,这里讲使用SETNX来实现分布式锁 ...

  10. python自动化系列

    1.pytnon环境及IDE 文件还是txt的,是如何查找到python 的呢? 是通过path查找的,且还按以下打印出的内容逐步查找的 mac版