正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

正则表达式非python独有,python 提供了正则表达式的接口,re模块

一、正则匹配字符简介

模式 描述
\d 匹配数字
\D 匹配非数字
\w 匹配字母数字及下划线
\W 匹配非字母数字下划线
\s 匹配任意空白字符
\A 匹配字符串开始
\Z 匹配字符串结束,如果存在换行,只匹配到换行前最后一个字符串
\z 匹配字符串结束
\G 匹配最后匹配完成的位置
\n 匹配换行符
\t 匹配制表符
^ 从字符串的开头匹配
$ 匹配到字符串的末尾
. 匹配任意字符,换行符除外,但是当re.DOTALL标记被指定时,则可以匹配任意字符
[...]  用来表示一组字符,例:[abc]匹配'a','b','c'
 [^...]  匹配不存在[]中的字符,例[^abc],匹配a,b,c之外的字符
 *  匹配0个或多个的表达式
 +  匹配一个或多个的表达式
 ?  匹配0个或1个有前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配n个前面表达式
{n,m} 匹配n到mci由前面的正则表达式定义的片段,贪婪方式
a|b 匹配a或者b
() 匹配括号内的表达式,也表示一个组(match,search)

二、re模块常用的一些方法

re.match(pattern,content,flags)

pattern:匹配规则

content:要匹配的字符串

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

返回结果:匹配到则返回一个match对象,匹配失败返回None

获取对象方法

group(n): 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups():返回一个包含所有小组字符串的元组

span():匹配的起始到结束位置

局限性:1.match方法是从字符串起始位置开始进行匹配,若是起始位置匹配不到则直接结束

    2.match 方法匹配到内容后就结束匹配,无法获取多个

实例如下:

import re

content="abc123abc234"
result = re.match('abc[0-9]+',content) #从开头匹配
result1 = re.match('bc[0-9]+',content) #不从开头匹配
print 'result=',result.group()
print 'result1=',result1

结果:

result= abc123
result1= None

实例中的abc[0-9]类型,应该有多个,但是因为match 匹配到就直接结束,导致只有一个结果返回,并且result1 由于并不是从开头进行匹配,所以没有结果返回

re.search(pattern,content,flags=0)

与match 相比,search的主要区别是扫描整个字符串去匹配目标。匹配成功后返回

实例如下

import re

content="abc123abc234"
result = re.search('abc[0-9]+',content) #从开头匹配
result1 = re.search('bc[0-9]+',content) #不从开头匹配
print 'result=',result.group()
print 'result1=',result1.group()

结果如下

result= abc123
result1= bc123

re.sub(pattern,repl,content,count)

pattern:匹配规则

repl:替换的字符串,也可以为一个函数

content:要被替换查找的字符串

count:替换的次数,默认替换全部

实例

import re

content="abc123abc234"
result = re.sub('(abc)','',content,1) #删除abc字符串1次
result1 = re.sub('(abc)','',content) #删除全部abc字符串
print 'result=',result
print 'result1=',result1

结果

result= 123abc234
result1= 123234

实例

import re
def double(match):
vaule = int(match.group())
return str(vaule*2)
content="abc123abc234"
result = re.sub('([0-9])',double,content) #将字符串的数字乘以2
print 'result=',result

结果

result= abc246abc468

re.findall(pattern,content,flags=0)

findall 方法与search的主要差别在与findall 能查找出所有与之匹配的字符串

实例

import re

content="abc123abc234"
result = re.findall('([0-9]+)',content) #匹配数字
print 'result=',result

结果

result= ['', '']

以上就是python正则表达式常用的一些方法,以及正则表达是中常用的一些匹配规则

python 爬虫之-- 正则表达式的更多相关文章

  1. 玩转python爬虫之正则表达式

    玩转python爬虫之正则表达式 这篇文章主要介绍了python爬虫的正则表达式,正则表达式在Python爬虫是必不可少的神兵利器,本文整理了Python中的正则表达式的相关内容,感兴趣的小伙伴们可以 ...

  2. 【Python爬虫】正则表达式与re模块

    正则表达式与re模块 阅读目录 在线正则表达式测试 常见匹配模式 re.match re.search re.findall re.compile 实战练习 在线正则表达式测试 http://tool ...

  3. python爬虫训练——正则表达式+BeautifulSoup爬图片

    这次练习爬 传送门 这贴吧里的美食图片. 如果通过img标签和class属性的话,用BeautifulSoup能很简单的解决,但是这次用一下正则表达式,我这也是参考了该博主的博文:传送门 所有图片的s ...

  4. 【python爬虫和正则表达式】爬取表格中的的二级链接

    开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...

  5. Python爬虫运用正则表达式

    我看到最近几部电影很火,查了一下猫眼电影上的数据,发现还有个榜单,里面有各种经典和热映电影的排行榜,然后我觉得电影封面图还挺好看的,想着一张一张下载真是费时费力,于是突发奇想,好像可以用一下最近学的东 ...

  6. Python爬虫之正则表达式(3)

    # re.sub # 替换字符串中每一个匹配的子串后返回替换后的字符串 import re content = 'Extra strings Hello 1234567 World_This is a ...

  7. Python爬虫之正则表达式(1)

    廖雪峰正则表达式学习笔记 1:用\d可以匹配一个数字:用\w可以匹配一个字母或数字: '00\d' 可以匹配‘007’,但是无法匹配‘00A’; ‘\d\d\d’可以匹配‘010’: ‘\w\w\d’ ...

  8. python爬虫之正则表达式

    一.简介 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念 ...

  9. Python爬虫基础——正则表达式

    说到爬虫,不可避免的会牵涉到正则表达式. 因为你需要清晰地知道你需要爬取什么信息?它们有什么共同点?可以怎么去表示它们? 而这些,都需要我们熟悉正则表达,才能更好地去提取. 先简单复习一下各表达式所代 ...

随机推荐

  1. linux 下安装 python ngix 项目发布流程

    1.安装python #1.安装python3.7所需要的依赖包yum -y groupinstall "Development tools"yum -y install zlib ...

  2. FT_Get_Var error on comiling

    [Julian@julian-linux-t450 gtk]$ gcc `pkg-config --cflags gtk+-.` -o exam00 exam00.c `pkg-config --li ...

  3. 【转】UML之类图和对象图

    思路呈现 什么是类图? 描述类.接口.协作及他们之间的关系的图.显示系统中类的静态结构. 有什么作用? 描述软件系统的静态结构 ①对系统的词汇建模 ②对简单协作建模 ③对逻辑数据库模式建模 什么是对象 ...

  4. JDK的小Bug你了解么?

    ​用了这么长时间的JDK了,有没有老铁发现JDK的bug呢?从最早版本的JDK1.2到现在普及开的JDK1.8以来,JAVA经历了这么多年的风风雨雨,依然坚持在一线上,是不是感觉很神奇,但是,有没有多 ...

  5. Vue.js 源码分析(十八) 指令篇 v-for 指令详解

    我们可以用 v-for 指令基于一个数组or对象来渲染一个列表,有五种使用方法,如下: <!DOCTYPE html> <html lang="en"> & ...

  6. Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局

    传统弹性伸缩的困境 弹性伸缩是 Kubernetes 中被大家关注的一大亮点,在讨论相关的组件和实现方案之前.首先想先给大家扩充下弹性伸缩的边界与定义,传统意义上来讲,弹性伸缩主要解决的问题是容量规划 ...

  7. Vs2017发布可在线更新的Winform程序

    如题,此处引用“南秦岭”的博文<使用ClickOnce发布Windows应用程序>,对作者表示感谢! 补充说明: “发布文件夹”是指你电脑上的本地文件夹:“安装文件夹”是指你提供给用户的u ...

  8. jmeter实操及性能测试基础知识整理 - 不断更新

    主要基于jmetet工具 有任何疑问直接留言,可以相互讨论 线程组菜单: 线程数:并发数量Rame-Up时间(秒):多久跑完线程数,比如线程是10,Rame-Up时间是10秒,就是10秒内跑完10个线 ...

  9. VMware——安装CentOS

    VMware——安装CentOS 摘要:本文主要记录了在VMware虚拟机里安装CentOS的步骤. 下载操作系统 可以从下面的镜像地址去下载各种版本的CentOS,此次安装使用的版本是7.2: ht ...

  10. MySQL5.7增量备份恢复全实战

    一. 简介 1. 增量备份 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味着,第一次增量 备份的对象是进行全备后所产生的增加和修改的文件; ...