Python for Informatics 第11章 正则表达式一(译)
注:文章原文为Dr. Charles Severance 的 《Python for Informatics》。文中代码用3.4版改写,并在本机测试通过。
目前为止,我们一直在通读文件,查找模式和抽取字里行间我们感兴趣的各种信息。我们一直在使用像split和find的字符串方法,以及列表和字符串的切片功能来抽取行中的部分内容。
像这样的查找和抽取任务是如此常见,所以Python拥有一个非常强大的库——正则表达式(regular expressions)来优雅地处理这些任务。我们未早一点介绍正则表达式是因为,虽然它们很强大,但是有点复杂,并且需要一些时间去适应它们的语法。
正式表达式近乎是一个用来查找和分析字符串的小型编程语言。事实上,关于正则表达式可以写一本完整的书。在这一章,我们将只涉及其基础。想要获得正则表达式的更多信息,请参阅:
http://en.wikipedia.org/wiki/Regular_expression
http://docs.python.org/library/re.html
在你使用正则表达式前,你必须将库文件导入到你的程序。正则表达式最简单的应用是search()函数,下面的程序将演示search函数的小应用。
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('From:', line):
print(line)
我们打开mbox-short文件,循环读取每一行,并用正则表达式的search()来查找包含“From:”字符串的行,然后打印输出这些行。这个程序并未运用正则表达式的真实能力,因为我们只要简单的使用line.find()也可实现同样的结果。
当我们在查询字符串中添加特殊字符,使得我们可以更加精确的控制那些匹配字符串的行,这时候正则表达式的能力就开始显现。在正则表达式中添加那些特殊字符可以让我们用非常少的代码实现复杂的匹配和抽取。
例如,正则表达式中用插入符号^来匹配一行中的开始。我们只要在查询字符前添加一个插入符,就可将程序修改为只匹配打印以“From:"开始的行,具体代码如下:
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('^From:', line)
print(line)
现在,我们将只匹配以”From:“开始的行。这个简单的例子我们可以用字符串库的startswith()方法同样实现。这个例子用来告诉我们这样一个概念,包含特殊字符的正则表达式将给我们更强的控制。
注:原文给的代码是2.7版,因为我自己使用的是3.4版,所以将print line 修改为 print(line)。因为能力有限,今天先到此为止,明天继续。
Python for Informatics 第11章 正则表达式一(译)的更多相关文章
- Python for Informatics 第11章 正则表达式五(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.4 转义字符 之前我们在正 ...
- Python for Informatics 第11章 正则表达式六(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.7 调试 Python有一 ...
- Python for Informatics 第11章 正则表达式四(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.3 组合查询和抽取 如果我 ...
- Python for Informatics 第11章 正则表达式三(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.2 用正则表达式抽取数据 ...
- Python for Informatics 第11章 正则表达式二(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.1 正则表达式的字符匹配 ...
- 《python基础教程(第二版)》学习笔记 文件和素材(第11章)
<python基础教程(第二版)>学习笔记 文件和素材(第11章) 打开文件:open(filename[,mode[,buffering]]) mode是读写文件的模式f=open(r' ...
- 《Python学习手册 第五版》 -第11章 赋值、表达式和打印
上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...
- [flask/python/web] 解析flask web开发(Miguel著)一书第11章主页不显示博文表单的问题
---------------------------------------------以下内容2017.7.14更新---------------------------------------- ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
随机推荐
- Scrapy爬取美女图片 (原创)
有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...
- C#调用C++DLL的小总结5---和C++的DLL的联合调试
http://fpcfjf.blog.163.com/blog/static/5546979320134922938373/ http://blog.csdn.net/jiangxinyu/artic ...
- Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、dhroid..
对于Android初学者以及对于我们菜鸟,这些大神们开发的轻量级框架非常有用(更别说开源的了). 下面转载这10个框架的介绍:(按顺序来吧没有什么排名). 一. Afinal 官方介绍: Afina ...
- 攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍
一.IoC的概念: IoC(控制反转)是Spring容器的核心.另一种解释是DI(依赖注入),即让调用类对某一个接口的依赖关系由第三方注入,以移除调用类对某一个接口实现类的一览. 定义如此,由此可见, ...
- org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:
详细错误堆栈信息: org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" ...
- <转>ORA-12154: TNS: 无法解析指定的连接标识符
相信作为ORACLE数据库的开发人员没有少碰到“ORA-12154: TNS: 无法解析指定的连接标识符”,今天我也又碰到了类似的情况,将我的解决方法进行小结,希望能对碰到同样问题的友人们提供帮助. ...
- Centos6.5里安装Hbase(伪分布式)
首先我们到官方网站下载Hbase,而我使用的版本是hbase-0.94.27.tar.gz 解压下来: tar zxvf hbase-.tar.gz 寻找java安装路径 [root@localhos ...
- phpcms v9 黄页实现手机访问手机版,电脑访问电脑版(双模板)
第一步.模板文件夹下,yp复制一份,改名字 ypwap 第二步.修改phpcms/modules/yp/index.php和phpcms/modules/ypwap/index.php //判断客户端 ...
- phpMailer在thinkPHP框架中邮件发送
资源下载地址:http://pan.baidu.com/s/1c0kAoeO 提取码:ry5v 关键代码:application/Common/Common/funciton.php <?php ...
- HR外包系统 - 客户员工 发薪需求/个税需求 设置
最好,客户公司层面进行设置,如果单一情况,只需要设置公司,如果不是单一情况,设置员工, 另外员工只能从公司设置好的地方选择过来. 增强系统简便设置和设置的灵活性.