爬虫系列(五) 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 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...
随机推荐
- 抓包分析TCP的三次握手和四次握手
问题描写叙述: 在上一篇<怎样对Android设备进行抓包>中提到了,server的开发者须要我bug重现然后提供抓包给他们分析.所以抓好包自己也试着分析了一下.发现里面全是一些TCP协议 ...
- javascript 打印函数名称和被引用的函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C# Socket 您的主机中的软件中止了一个已建立的连接 An established connection was aborted by the software in your host machine
http://tieba.baidu.com/p/3223234493 问题: 服务端在接收客户端数据的时候,抛了个异常出来:System.Net.Sockets.SocketException: 您 ...
- 【POJ 3076】 Sudoku
[题目链接] http://poj.org/problem?id=3076 [算法] 将数独问题转化为精确覆盖问题,用Dancing Links求解 [代码] #include <algorit ...
- heap堆&&priority_queue优先队列
堆(heap)不是stl中的东西...它分为 max heap 和min heap. 但我不想用这些,而是采用了priority_queue,优先队列,定义在queue中.顾名思义,它的作用就是无论怎 ...
- 杂项:JavaScript
ylbtech-杂项:JavaScript JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广 ...
- SiteMesh3使用实例和详解
一.SiteMesh介绍 SiteMesh是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的.[来自百度百科] 通俗的理解就是,SiteMesh把页面中变化的和 ...
- android 可拖动控件 ontouchevent
首先附上文章的转载内容的链接: 学习android 可拖动事件首先需要对android的屏幕和touchevent参数建立一个详细的知识结构. 1.android坐标系统 一.首先明确一下 andro ...
- ACM_一道耗时间的水题
一道耗时间的水题 Time Limit: 2000/1000ms (Java/Others) Problem Description: Do you know how to read the phon ...
- Linux安装java jdk、mysql、tomcat
安装javajdk 1.8 检查是否安装 rpm -qa | grep jdk rpm方式安装 下载java1.8 jdk http://download.oracle.com/otn-pub/jav ...