密歇根大学python课程_【Python学习笔记】Coursera课程《Using Python to Access Web Data 》 密歇根大学 Charles Severance——Week...

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课程《Python Data Structures》 密歇根大学 Charles Severance——Week6 Tuple课堂笔记

Coursera课程 密歇根大学 Charles Severance Week6 Tuple 10 Tuples 10.1 Tuples A ...

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课程 密歇根大学 Week4 Programs that Surf the Web 12.3 Unicod ...

《Using Python to Access Web Data》 Week5 Web Services and XML 课堂笔记

Coursera课程 密歇根大学 Week5 Web Services and XML 13.1 Data on the ...

《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记

Coursera课程 密歇根大学 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, ...

随机推荐

JavaScript停止冒泡和阻止浏览器默认行为

JS停止冒泡 function myfn(e){ window.event? window.event.cancelBubble = true : e.stopPropagation(); } js阻 ...

windows下 nvm下载node被墙了解决办法

不需要这么麻烦的,在1.1.1版本中,确实没有实现命令行设置.这点你分析的很对,但是从配置文件中读取镜像地址已经完成,所以直接在settings.txt中手工设置一下就好了,无需编译.以下是我的文件位 ...

对象排序,compareTo

第一个例子 /*为了比较,让自己的类实现Comparable接口,按照自己想要的排序方式重写compareTo *Map只是提供了对键的排序,但是当我们需要对值排序时就的提供我们自己的比较器 这里 只 ...

js-FCC算法Friendly Date Ranges

让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...

#pragma once与 #ifndef的区别

为了避免同一个文件被include多次 1   #ifndef方式2   #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别.   ...

【过程改进】10分钟进阶Nuget

目录 nuget初识 nuget本地包 nuget解决依赖冲突 nuget是什么 .net版的maven(java)? 如果你用过windows的chocolatey,mac的homebrew或许更容 ...

[译]JavaScript:函数的作用域链

原文:http://blogs.msdn.com/b/jscript/archive/2007/07/26/scope-chain-of-jscript-functions.aspx 在JavaScr ...

【我们都爱Paul Hegarty】斯坦福大学IOS8公开组个人笔记28 ScrollView 幻灯片视图

随着移动设备,iphone屏幕尺寸的限制.超过内容的屏幕大小为scrollview于,通过滑动来获得.scrollview滑动方向可以是也可以是横向垂直,scrollview可以嵌套,例如,纵向滑动s ...

js操作

1.1.直接传入Javascript代码,定位元素 js可以点击页面上不显示暂时隐藏(比如下拉列表),但是html文件中存在的属性 WebDriver driver = new FirefoxDriv ...

RocketMQ源码 — 三、 Producer消息发送过程

Producer 消息发送 producer start producer启动过程如下图 public void start(final boolean startFactory) throws MQ ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值