爬虫系列(五) 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 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...
随机推荐
- xtrabackup 2.3.3编译安装
***************************************************************** 安装 ******************************* ...
- OTA制作及升级过程笔记【转】
本文转载自:http://www.it610.com/article/5752570.htm 1.概述 1.1 文档概要 前段时间学习了AndroidRecovery模式及OTA升级过程,为加深理 ...
- Linux Framebuffer驱动框架之二软件架构(未完待续)【转】
本文转载自:http://blog.csdn.net/gqb_driver/article/details/12918547 /************************************ ...
- C语言实现字符串拼接
#include <stdio.h>#include <stdlib.h>#include <string.h> char* str_contact(const c ...
- 什么是 less? 如何使用 less?
什么是 Less? Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).嵌套.函数等功能,让 CSS 更易编写.维护等. 本质上,Less 包含一套自定义 ...
- PCB 奥宝LDI 输出 轴交换与镜像关系
持续P2 奥宝LDI改造,针对轴交换与镜像关系整理如下:(标记) 关键参数说明: 轴交换swap_axes: 当为Yes,则图形--镜像+旋转90度,当为No,则图形--不动 xmirror与ymir ...
- Django day08 多表操作 (五) 聚合,分组查询 和 F,Q查询
一:聚合,分组查询 二:F, Q查询
- [Luogu 2216] [HAOI2007]理想的正方形
[Luogu 2216] [HAOI2007]理想的正方形 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输 ...
- T - Amusing Joke(map)
Problem description So, the New Year holidays are over. Santa Claus and his colleagues can take a re ...
- java热部署
最近使用java做项目,研究了一下热部署,能够提高工作效率. 需要准备的工具: 1.安装文件http://update.zeroturnaround.com/update-site/ 2.破解 下载破 ...