【Python学习笔记】Coursera课程《Using Python to Access Web Data 》 密歇根大学 Charles Severance——Week2 Regular Expressions课堂笔记
Coursera课程《Using Python to Access Web Data》 密歇根大学 Charles Severance
**Week2 Regular Expressions **
11.1 Regular Expressions
11.1.1 Python Regular Expression Quick Guide
| ^ | 匹配一行的开头 |
|---|---|
| $ | 匹配一行的末尾 |
| . | 匹配任何字符 |
| \s | 匹配空白字符 |
| \S | 匹配任何非空白字符 |
| ***** | 重复一个字符0次或多次 |
| *? | 重复一个字符0次或多次(non-greedy) |
| + | 重复一个字符一次或多次 |
| +? | 重复一个字符一次或多次(non-greedy) |
| [aeiou] | 匹配被列出来的一个单字符 |
| [^XYZ] | 匹配没有被列出来的一个单字符 |
| [a-z0-9] | 设置可以包含的字符 |
| () | 表示提取字符串的开头处 |
| ) | 表示提取字符串的结尾处 |
【注】non-greedy模式表示尽可能少的匹配字符
11.1.2 The Regular Expression Module
在程序里使用正则表达式之前,必须使用'import re'引入一个模块。
然后可以使用re.search()来查看,是否一个字符串匹配正则表达式,和find()有点相似。
也可以使用re.findall()来提取一个字符串的部分来匹配正则表达式,这和find()与切片var[5:10]很相似。
11.1.3 Using re.search() Like find()
使用find()的代码
hand = open('mobox-short.txt')
for line in hand:
line = line.restrip()
if line.find('From:') >= 0:
print(line)
使用re.search()的代码
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('From:', line):
print(line)
11.1.4 Using re.search() Like startswith()
使用startswith()的代码
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if line.startswith('From:'):
print(line)
使用re.search()的代码
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('From:', line):
print(line)
11.1.5 Wild-Card Characters
点号可以匹配任何字符。但如果加上了星号,那么这个字符可以出现任何次。
所以正则表达式^X.*:表示,查找以X开头的字符串,X后面可以接任何字符,而且任意长度。
那么例如我们可能会返回这样的
X-Sieve: CMU Sieve 2.3
X-DSPAM-Result: Innocent
X-Plane is behind schedule: two weeks
11.1.6 Fine-Tuning Your Match
为了更精准地匹配到我们想要的东西。我们可以稍作改进。
比如改成^X-\S+:表示,查找以X开头的字符串,X后面可以接任何不含空格的字符,而且字符数大于等于1个。
那么我们会上面的两行数据,而不会返回第三行。
11.2 Extracting Data
使用[0-9]+,表示查找一个或多个数字。
>>> import re
>>> x = 'My 2 favorite numbers are 19 and 42'
>>> y = re.findall('[0-9]+', x)
>>> print(y)
['2', '19', '42']
11.2.1 Warning: Greedy Matching
之前说的Greedy模式,其实就是匹配符合条件的最长的字符。
比如说
>>> import re
>>> x = 'From: Using the : character'
>>> y = re.findall('^F.+:', x)
>>> print(y)
['From: Using the :']
因为是Greedy模式,所以不是匹配的'From:'。
11.2.2 Non-Greedy Matching
而如果在+或后加上一个?,则可以切换到Non-Greedy*模式。
>>> import re
>>> x = 'From: Using the : character'
>>> y = re.findall('^F.+?:', x)
>>> print(y)
['From:']
11.2.3 Fine-Tuning String Extraction
如果我们要定位下面这段中的邮件地址。
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
那么我们可以这样
>>> y = re.findall('\S+@\S+', x)
>>> print(y)
['stephen.marquard@uct.ac.za']
使用括号,我们可以规定我们想要提取的文本的起始。比如这样
>>> y = re.findall('From (\S+@\S+)', x)
>>> print(y)
['stephen.marquard@uct.ac.za']
11.2.4 Spam Confidence
一个例子。
import re
hand = open('mbox-short.txt')
numlist = list()
for line in hand:
line = line.rstrip()
stuff = re.findall('X-DSPAM-Confidence: ([0-9.]+)', line)
if len(stuff) != 1: continue
num = float(stuff[0])
numlist.append(num)
print('Maximum:', max(numlist))
Assignment
import re
hand = open('actual.txt')
numlist = list()
counts = dict()
for line in hand:
line = line.rstrip()
stuff = re.findall('[0-9]+', line)
if len(stuff) == 0: continue
for i in range(len(stuff)):
num = int(stuff[i])
numlist.append(num)
print(len(numlist))
print(sum(numlist))
【Python学习笔记】Coursera课程《Using Python to Access Web Data 》 密歇根大学 Charles Severance——Week2 Regular Expressions课堂笔记的更多相关文章
- 【Python学习笔记】Coursera课程《Python Data Structures》 密歇根大学 Charles Severance——Week6 Tuple课堂笔记
Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week6 Tuple 10 Tuples 10.1 Tuples A ...
- 【Python学习笔记】Coursera课程《Using Python to Access Web Data》 密歇根大学 Charles Severance——Week6 JSON and the REST Architecture课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week6 JSON and the REST Architecture 13.5 Ja ...
- 【Python学习笔记】Coursera课程《Using Databases with Python》 密歇根大学 Charles Severance——Week4 Many-to-Many Relationships in SQL课堂笔记
Coursera课程<Using Databases with Python> 密歇根大学 Week4 Many-to-Many Relationships in SQL 15.8 Man ...
- Coursera课程《Python数据结构》中课程目录
Python Data Structures Python Data Structures is the second course in the specialization Python for ...
- 《Using Python to Access Web Data》Week4 Programs that Surf the Web 课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week4 Programs that Surf the Web 12.3 Unicod ...
- 《Using Python to Access Web Data》 Week5 Web Services and XML 课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week5 Web Services and XML 13.1 Data on the ...
- 《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week3 Networks and Sockets 12.1 Networked Te ...
- Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级
前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...
- Python学习系列(四)Python 入门语法规则2
Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...
随机推荐
- [计算机网络] 互联网协议栈(TCP/IP参考模型)各层的主要功能及相应协议
应用层:提供用户与网络间的接口.----HTTP.FTP.SMTP 运输层:进程到进程间的数据传输.---TCP.UDP 网络层:主机到主机之间的数据传输.---IP.选路协议 数据链路层:相邻结点之 ...
- Apple - Hdu5160
Problem Description We are going to distribute apples to n children. Every child has his/her desired ...
- Android ListView各种效果实现总结,持续更新...
一.ListView圆角:重写ListView的onInterceptTouchEvent方法,通过pointToPosition(x,y)方法判断当前点击位置所对应的项,有三种情况:分别是第一项.最 ...
- (ex)BSGS题表
学了一下BSGS大概知道他是什么了,但是并没有做什么难题,所以也就会个板子.普通的BSGS,我还是比较理解的,然而exBSGS我却只理解个大概,也许还会个板子......(这个东西好像都会有一群恶心的 ...
- JS传递中文参数出现乱码的解决办法
一.window.open() 乱码: JS中使用window.open("url?param="+paramvalue)传递参数出现乱码,提交的时候,客户端浏览器URL中显示参数 ...
- apache的作用和tomcat的区别
经常在用apache和tomcat等这些服务器,可是总感觉还是不清楚他们之间有什么关系,在用tomcat的时候总出现apache,总感到迷惑,到底谁是主谁是次,因此特意在网上查询了一些这方面的资料,总 ...
- PhoneGap API介绍:Camera
本文将介绍PhoneGap API——Camera:使用设备的摄像头采集照片,对象提供对设备默认摄像头应用程序的访问. 方法: camera.getPicture 参数: cameraSuccess ...
- Leetcode 002. 两数相加
1.题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- HRBUST 1819
石子合并问题--圆形版 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 61(27 users) Total Accepted: 26( ...
- jq 正则
if(_each_this_type_name == 'post_num'){ var patrn = /^[a-zA-Z0-9]{3,12}$/; if(!patrn.test(_each_this ...