python 正则基本方法
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 正则基本方法的更多相关文章
- Python正则式的基本用法
Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...
- Python正则匹配字母大小写不敏感在读xml中的应用
需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...
- python字符串的方法
python字符串的方法 ############7个基本方法############ 1:join def join(self, ab=None, pq=None, rs=None): # real ...
- Python正则替换字符串函数re.sub用法示例(1)
本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...
- python 正则进阶常用方法
表达式 描述 正则表达式示例 符号 literal 匹配文本字符串的字面值literal foo rel1|rel2 匹配正则表达式rel1或rel2 foo|bar . 匹配任何字符(除了\n之外) ...
- 认识python正则模块re
python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...
- python 正则相关函数全解析
前言:网上有很多关于python正则函数的方法说明,这里尽可能用最简单的demo把所有函数之间的逻辑关系说清楚,供参考. 1.最原始的 re.compile()这个函数一般是需要和其它函数一起使用的, ...
- Python测试函数的方法之一
Python测试函数的方法之一 首先介绍简单的try......except尝试运行的放例如下面的图和代码来简单介绍下: 注释:提醒以下代码环境为2.7.x 请3.x以上的同学们老规矩print(把打 ...
- 使用python原生的方法实现发送email
使用python原生的方法实现发送email import smtplib from email.mime.text import MIMEText from email.mime.multipart ...
随机推荐
- mysql缓存分析
- [skill][makefile] makefile 常用内容记录
其实,makefile有点复杂. 文档看了又看,还是要经常翻,做个记录备忘 :) 1. 隐含命令 implicit rules 与 implicit rule 相对应的有 pattern rules ...
- 20165225《Java程序设计》第三周学习总结
20165225<Java程序设计>第三周学习总结 1.视频与课本中的学习: 遇到的问题: 问题如下,无法编译. 最后经同学点出要放在同一个打包的文件夹里,于是就运行成功了,下面是4_15 ...
- linux安装tacacs+服务器
tacacs+服务器搭建 软件下载地址:http://pan.baidu.com/s/1i4x3jrJ bzip2 -dc DEVEL.tar.bz2 | tar xvfp - #解压下载好的包 ...
- iOS App让自己的应用在其它应用中打开列表中显示
像百度网盘等应用,里面的文件打开时,都能够通过以下应用再打开文件.以下红色框框内的我的jpg就是我做的一个样例. 由于样例没有提供Icon,所以显示的是默认icon. 以下就是这样例的主要步骤和代 ...
- 【UNIX网络编程(三)】TCP客户/server程序演示样例
上一节给出了TCP网络编程的函数.这一节使用那些基本函数编写一个完毕的TCP客户/server程序演示样例. 该样例运行的过程例如以下: 1.客户从标准输入读入一行文本,并写给server. 2.se ...
- jenkins+maven+gitlab触发构建
1.安装插件 安装gitlab插件 回到项目配置在“构建触发器”那里有一个Build when a change is pushed to GitLab. GitLab webhook选项复制选项里的 ...
- chmod a+r file:给所有用户添加读的权限
chmod a+r *:用户自己使用此命令,柯给所有用户添加可读的权限 超级用户给其他用户设置权限:sudo chmod a+rx /home/user 使所有人可以访问,读取文件,bu no W ...
- adb移动端测试
1. Android介绍 Android 是google公司主导的一个开放的手机操作系统,不过目前已经超过了手机的局限,而定位于移动设备的操作系统. Android一词的本义指“机器人”,取名原因很简 ...
- 009-Iterator 和 for...of 循环
一.概述 原文地址:http://es6.ruanyifeng.com/#docs/iterator 二.详细 2.1.概念 遍历器(Iterator)是一种机制.它是一种接口,为各种不同的数据结构提 ...