Python爬虫之正则表达式基本用法实例分析


Posted in Python onAugust 08, 2018

本文实例讲述了Python爬虫之正则表达式基本用法。分享给大家供大家参考,具体如下:

一、简介

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

二、使用方法

1、简单看一下写法

函数语法:

re.match(pattern, string, flags=0)

函数参数说明:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.match方法返回一个匹配的对象,否则返回None

我们可以使用group(num)groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
import re
p = re.compile('abcd')
print(type(p))
#<class '_sre.SRE_Pattern'>
print(dir(p))
#['__class__', '__copy__', '__deepcopy__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'findall', 'finditer', 'flags', 'fullmatch', 'groupindex', 'groups', 'match', 'pattern', 'scanner', 'search', 'split', 'sub', 'subn']
m = p.match('abcdef')
print(type(m))
#<class '_sre.SRE_Match'>
print(dir(m))
#['__class__', '__copy__', '__deepcopy__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'end', 'endpos', 'expand', 'group', 'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 'span', 'start', 'string']
print(m.group())
#abcd
print(m.group(0))
#abcd

re.match()方法值匹配字符串的开头如果不满足,就返回一个None

import re
p = re.compile('abcd')
m = p.match('abdcef')
print(m.group())
#AttributeError: 'NoneType' object has no attribute 'group'

神奇的.

import re
p = re.compile('.')
m = p.match('abdcef')
print(m.group())
#a

特殊字符(元字符)

注意:\在里面是转义词的意思,例如,你想匹配一个re.compile('.'),这个.是匹配任意字符。但是我就想让它匹配一个.怎么办,re.compile('\.'),这样的话它就真的只匹配一个点。

Python爬虫之正则表达式基本用法实例分析

re.findall()

import re
p = re.compile('\.')
#匹配符号点(注意这里可前面加上了转义符\,就不是匹配任意字符了)
m = p.findall('abc.def.')
print(type(m))
#<class 'list'>
print(m)
#['.', '.']
#可以得出,返回的是一个list,全局查找,不想match方法只匹配字符串开头

数量词:

Python爬虫之正则表达式基本用法实例分析

贪婪模式和非贪婪模式

1、一个小例子

我们知道*表示匹配一个字符串0次或者多次,而+是匹配字符串1次或多次,所以*的时候匹配了0次也打印出来了,而+只找匹配1次的字符。

import re
p = re.compile('[abc]+')
m = p.findall('abcdef')
print(m)
#*
 #['abc', '', '', '', '']
#+
 #['abc']

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配.

而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。

2、{}

根据下面的例子不难看出,数量词{m}表示的是匹配前面字符串的几个字符串

import re
p = re.compile('[abc]{3}')
m = p.findall('abcdabcd')
print(m)
#{1}
 #['a', 'b', 'c', 'a', 'b', 'c']
#{2}
 #['ab', 'ab']
#{3}
 #['abc', 'abc']

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配,否则返回的是None(注意findall返回的是list,而search返回的直接就是字符串)

import re
p = re.compile('abcd')
m = p.search('abcdabcd')
print(m.group())

检索和替换

Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。

语法:

re.sub(pattern, repl, string, count=0, flags=0)

参数:

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

示例一:

替换一#开头的所有字符(匹配任意字符0次或者多次),替换成无。

import re
phone = "2004-959-559 # 这是一个国外电话号码"
num = re.sub('#.*','',phone)
print(num)

示例一:扩展

找到所有非数字的字符,‘'代表着删除。

import re
phone = "2004-959-559 # 这是一个国外电话号码"
num = re.sub('\D','',phone)
print(num)

正则表达式修饰符 - 可选标志

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志

Python爬虫之正则表达式基本用法实例分析

Python 相关文章推荐
Python isinstance判断对象类型
Sep 06 Python
python实现html转ubb代码(html2ubb)
Jul 03 Python
深入解析Python中的线程同步方法
Jun 14 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
对Python中plt的画图函数详解
Nov 07 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
带你认识Django
Jan 15 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
python集合删除多种方法详解
Feb 10 Python
django的autoreload机制实现
Jun 03 Python
Python实现学生管理系统(面向对象版)
Jun 24 Python
pandas数值排序的实现实例
Jul 25 Python
Python爬虫之pandas基本安装与使用方法示例
Aug 08 #Python
python MNIST手写识别数据调用API的方法
Aug 08 #Python
python实现屏保计时器的示例代码
Aug 08 #Python
详解Python 装饰器执行顺序迷思
Aug 08 #Python
python Flask 装饰器顺序问题解决
Aug 08 #Python
Python BS4库的安装与使用详解
Aug 08 #Python
python特性语法之遍历、公共方法、引用
Aug 08 #Python
You might like
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
php里array_work用法实例分析
2015/07/13 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
javascript中this的四种用法
2015/05/11 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python映射拆分操作符用法实例
2015/05/19 Python
改进Django中的表单的简单方法
2015/07/17 Python
Python深度优先算法生成迷宫
2018/01/22 Python
Python3中exp()函数用法分析
2019/02/19 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
安全生产检查通报
2014/01/29 职场文书
党在我心中演讲稿
2014/09/02 职场文书
优秀教研组申报材料
2014/12/26 职场文书
西游记读书笔记
2015/06/25 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
Java中使用Filter过滤器的方法
2021/06/28 Java/Android