爬虫系列(五) re的基本使用
1、简介
究竟什么是正则表达式 (Regular Expression) 呢?可以用下面的一句话简单概括:
正则表达式是一组特殊的 字符序列,由一些事先定义好的字符以及这些字符的组合形成,常常用于 匹配字符串
在 Python 中,re 模块 就是一个用于处理正则表达式的模块,详细信息可以参考 官方文档
另外,这里再给大家推荐一个博主常用的测试正则表达式的网站:http://tool.oschina.net/regex,不妨一试
2、特殊符号
上面说过,正则表达式实际上是由一些事先定义好的字符以及这些字符的组合形成
那么,这些特殊的字符究竟包括什么呢?它们又有怎样的含义呢?具体请看下面的讲解:
.
:匹配除换行符之外的 所有字符^
:匹配字符串的 开始位置$
:匹配字符串的 结束位置*
:匹配字符串 零次或多次,在后面加上 ? 表示启用非贪婪模式匹配(默认为贪婪模式)+
:匹配字符串 一次或多次,在后面加上 ? 表示启用非贪婪模式匹配(默认为贪婪模式)?
:匹配字符串 零次或一次,在后面加上 ? 表示启用非贪婪模式匹配(默认为贪婪模式){ }
:匹配字符串 指定次{M, N}
表示匹配字符串 M~N 次{M,}
表示匹配字符串至少 M 次{,N}
表示匹配字符串至多 N 次{N}
表示匹配字符串 N 次
[ ]
:匹配 括号内所包含的任意一个字符若连字符 (-) 出现在字符串中间则表示范围,出现在首位则作普通字符;
若脱字符 (^) 出现在字符串首位则表示排除,出现在中间则作普通字符
( )
:捕获子组,将括号中的匹配模式作为一个整体被捕获,并作为子组返回(?: )
:非捕获子组,将括号中的匹配模式作为一个整体被捕获,但不作为子组返回\b
:匹配一个 单词边界,单词被定义成字母数字或下横线字符\B
:与\b
相反\d
:对于 str 类型,匹配任何 数字字符,包括 [0-9] 以及其它数字字符
对于 str 类型开启 re.ASCII 标志或者 bytes 类型,只匹配 [0-9]
\D
:与\d
相反\s
:对于 str 类型,匹配任何 空白字符,包括 [\t\n\r\f\v] 以及其它空白字符
对于 str 类型开启 re.ASCII 标志或者 bytes 类型,只匹配 [\t\n\r\f\v]
\S
:与\s
相反\w
:对于 str 类型,匹配任何 单词字符,包括 [a-zA-Z0-9_] 以及其它单词字符
对于 str 类型开启 re.ASCII 标志或者 bytes 类型,只匹配 [a-zA-Z0-9_]
\W
:与\w
相反
下面我们来看一个简单的例子,帮助大家更好的理解正则表达式的匹配方式
匹配整数
^ 匹配开头
-? 匹配减号字符,零次或一次,对应正整数和负整数
[1-9] 匹配 1~9 之间的任意一个数字,确保整数的第一个数字不能为 0
\d* 匹配任意数字字符,零次或多次
$ 匹配结尾
^-?[1-9]\d*$
3、常用方法
(1)match(pattern, string, flags=0)
在 string 起始位置开始匹配 pattern,flags 表示标志位
若匹配成功则返回 SRE_Match 对象,若匹配不成功则返回 None 对象
_sre.SRE_Match 对象常用的方法列举如下:
start([group])
:返回匹配开始的位置end([group])
:返回匹配结束的位置span([group])
:返回匹配的范围group(num=0)
:返回匹配的字符串,若对象中有子组,则加上 num 参数可获取相应子组
>>> import re
>>> result = re.match(r'abc(\d+)', "abc123def456abc789")
>>> type(result)
# <class '_sre.SRE_Match'>
>>> result.start() # 查看匹配的起始位置
# 0
>>> result.end() # 查看匹配的结束位置
# 6
>>> result.span() # 查看匹配的范围
# (0, 6)
>>> result.group() # 查看匹配的字符串
# 'abc123'
>>> result.group(1) # 查看匹配的子组
# '123'
(2)search(pattern, string, flags=0)
在 string 中搜索第一次出现的 pattern,flags 表示标志位
同样的,若匹配成功则返回 SRE_Match对象,若匹配不成功则返回 None对象
>>> import re
>>> result = re.search(r'abc(\d+)', "abc123def456abc789")
>>> type(result)
# <class '_sre.SRE_Match'>
>>> result.span() # 查看匹配的范围
(0, 6)
(3)findall(pattern, string, flags=0)
在 string 中搜索所有符合条件的 pattern,flags 表示标志位
一般情况下,该方法返回匹配内容的 列表,若匹配模式中含有子组,则返回对应的子组列表
>>> import re
>>> result = re.findall(r'abc\d+', "abc123def456abc789") # 不含子组
>>> type(result)
# <class 'list'>
>>> for item in result:
print(item)
# abc123
# abc789
>>> result = re.findall(r'abc(\d+)', "abc123def456abc789") # 含有子组
>>> type(result)
# <class 'list'>
>>> for item in result:
print(item)
# 123
# 789
(4)finditer(pattern, string, flags=0)
在 string 中搜索所有符合的 pattern,flags表示标志位
一般情况下,该方法返回匹配内容的 迭代器对象
>>> import re
>>> result = re.finditer(r'abc(\d+)', "abc123def456abc789")
>>> type(result)
# <class 'callable_iterator'>
>>> for item in result:
print(item)
# <_sre.SRE_Match object; span=(0, 6), match='abc123'>
# <_sre.SRE_Match object; span=(12, 18), match='abc789'>
(5)compile(pattern, flags=0)
编译正则表达式模式为正则表达式对象
通常情况下,如果需要重复使用某个正则表达式,那么可以先将该正则表达式编译成模式对象,以下是参数说明:
pattern :匹配模式,建议使用原始字符串表示
flags :标志位,用于控制正则表达式的匹配方式,可选值如下,多个值之间用
|
分割:re.I
\re.IGNORECASE
:不区分大小写re.L
\re.LOCALE
:取决于当前语言环境re.S
\re.DOTALL
:使.
匹配包括换行符在内的所有字符re.M
\re.MULTILINE
:使^
匹配字符串的开头和每行的开头,使$
匹配字符串的结尾和每行的结尾
该方法返回一个 SRE_Pattern对象,该对象常用的方法如下:
match(string[, pos[, endpos]])
用对象中的匹配模式匹配 string 的起始位置,该方法返回 SRE_Match 对象,用 pos 和 endpos 表示匹配的范围
search(string[, pos[, endpos]])
用对象中的匹配模式匹配 string,该方法返回 SRE_Match 对象,用 pos 和 endpos 表示匹配的范围
findall(string[, pos[, endpos]])
用对象中的匹配模式匹配 string,该方法返回列表,用 pos 和 endpos 表示匹配的范围
finditer(string[, pos[, endpos]])
用对象中的匹配模式匹配 string,该方法返回迭代器,用 pos 和 endpos 表示匹配的范围
【参考资料】
【爬虫系列相关文章】
爬虫系列(五) re的基本使用的更多相关文章
- 爬虫系列(三) urllib的基本使用
一.urllib 简介 urllib 是 Python3 中自带的 HTTP 请求库,无需复杂的安装过程即可正常使用,十分适合爬虫入门 urllib 中包含四个模块,分别是 request:请求处理模 ...
- 爬虫系列(九) xpath的基本使用
一.xpath 简介 究竟什么是 xpath 呢?简单来说,xpath 就是一种在 XML 文档中查找信息的语言 而 XML 文档就是由一系列节点构成的树,例如,下面是一份简单的 XML 文档: &l ...
- 爬虫系列(二) Chrome抓包分析
在这篇文章中,我们将尝试使用直观的网页分析工具(Chrome 开发者工具)对网页进行抓包分析,更加深入的了解网络爬虫的本质与内涵 1.测试环境 浏览器:Chrome 浏览器 浏览器版本:67.0.33 ...
- 爬虫系列(四) 用urllib实现英语翻译
这篇文章我们将以 百度翻译 为例,分析网络请求的过程,然后使用 urllib 编写一个英语翻译的小模块 1.准备工作 首先使用 Chrome 浏览器打开 百度翻译,这里,我们选择 Chrome 浏览器 ...
- 爬虫系列(六) 用urllib和re爬取百度贴吧
这篇文章我们将使用 urllib 和 re 模块爬取百度贴吧,并使用三种文件格式存储数据,下面先贴上最终的效果图 1.网页分析 (1)准备工作 首先我们使用 Chrome 浏览器打开 百度贴吧,在输入 ...
- 爬虫系列(七) requests的基本使用
一.requests 简介 requests 是一个功能强大.简单易用的 HTTP 请求库,可以使用 pip install requests 命令进行安装 下面我们将会介绍 requests 中常用 ...
- 爬虫系列(八) 用requests实现天气查询
这篇文章我们将使用 requests 调用天气查询接口,实现一个天气查询的小模块,下面先贴上最终的效果图 1.接口分析 虽然现在网络上有很多免费的天气查询接口,但是有很多网站都是需要注册登陆的,过程比 ...
- 爬虫系列(十) 用requests和xpath爬取豆瓣电影
这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...
- 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论
这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...
随机推荐
- IOS_OC_Category
1.Category概述 那的Category的使用场景有那些呢: 1.类包括了非常多个方法实现,而这些方法须要不同团队的成员来实现 2.当你在使用基础类库中的类时,你不想继承这些类而仅仅想加入一些方 ...
- Ubuntu14.04下Android系统与应用开发软件完整apt-get 源。
# deb cdrom:[Ubuntu 14.04.1 LTS _Trusty Tahr_ - Release amd64 (20140722.2)]/ trusty main restricted# ...
- CSS学习(十四)-CSS颜色之中的一个
一.理论: 1.RGB色彩模式 a.CMYK色彩模式 b.索引色彩模式 (主要用于web) c.灰度模式 d.双色调模式 2.opacity: a.alphavalue:透明度 b.inheri ...
- 《Qt on Android核心编程》前言:为什么写作本书
2008年.我開始在CSDN写技术博客. 在此之前,我的理想是写出受人待见的小说来.我也以前在网络论坛上笔耕不辍获得一些成绩,也以前发表过一些散文以及小说.而那一年,当我再次拾起笔来写东西时.却选择了 ...
- luogu2577 [ZJOI2005] 午餐 贪心
题目大意 THU ACM小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排队打饭,二号队伍到二号窗口去排队打饭.每个人打完饭后立刻开始吃,所有人都吃 ...
- oc31--new实现
// // main.m // new方法实现原理 #import <Foundation/Foundation.h> #import "Person.h" int m ...
- 使用ALSA编写自己的音频程序【转】
本文转载自:http://blog.csdn.net/beyondioi/article/details/6994548 Alsa是Linux高级音频接口.面对众多的音频设备,Alsa为Linux音频 ...
- DNS隐蔽通道 是可以通过dig 子域名来追踪其真实IP的
比如a.friendskaka.com 是我的外发子域名,那么可以按照下面两个命令来追踪IP: bonelee@bonelee-VirtualBox:~/桌面$ dig auth.a.friendsk ...
- hihocoder 1676 树上等差数列 黑科技树形dp
#1676 : 树上的等差数列 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵包含N个节点的无根树,节点编号1~N.其中每个节点都具有一个权值,第i个节点的权值 ...
- 安装Windows包管理工具Chocolatey
1.开始菜单里面用PS的管理员模式打开,执行一下命令. Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object Syste ...