python正则-re的用法详解


Posted in Python onJuly 28, 2019

天在刷题的时候用到了正则,用的过程中就感觉有点不太熟练了,很久没有用正则都有点忘了。所以现在呢,我们就一起来review一下python中正则模块re的用法吧。

今天是review,所以一些基础的概念就不做介绍了,先来看正则中的修饰符以及它的功能:

修饰符

•re.I 使匹配对大小写不敏感
•re.L 做本地化识别匹配
•re.M 多行匹配,影响^和$
•re.S 使.匹配包括换行在内的所有字符
•re.U 根据Unicode字符集解析字符.这个标志影响\w \W \b \B
•re.X 该标志通过给予你更灵活的格式以便你将正则表达式写的更易于理解.

模式

•^ 匹配字符串开头
•$ 匹配字符串结尾
•. 匹配人以字符,除了换行符号.当re.DOTAALL标记被指定时,则可以匹配包括换行符的任意字符.
•[...] 用来表示一组字符,单独列出:[amk]匹配a,m或k
•[^...] 不在[]中的字符:[^amk]匹配除amk之外的字符
•re* 匹配0个或多个的表达式
•re+ 匹配1个或多个的表达式
•re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式.
•re{n} 精准匹配n个前面表达式
•re{n,} 匹配大于等于n个前面表达式
•re{n,m} 匹配n到m个前面的表达式定义的片段,贪婪方式
•a|b 匹配a或b
•(re) 对正则表达式分组,并记住匹配的文本
•(?imx) 正则表达式包含三种可选标志,imx,只影响括号中的区域.
•(?-imx) 正则表达式关闭imx可选标志,只影响括号中的区域.
•(?:re) 类似(...)但不表示一个组
•(?imx:re) 在括号中使用imx可选标志
•(?-imx:re) 在括号中不是用imx可选标志
•(?#...) 注释
•(?=re) 前向肯定界定符.如果所含正则表达式,以...表示,在当前位置成功匹配时成功,否则失败.但一旦所含表达式已经尝试,匹配引擎根本没有提高,模式的剩余部分还要尝试界定符右边.
•(?!re) 前向否定界定符.与肯定界定符相反;当所含的表达式不能在字符串当前位置匹配成功时成功.
•(?>re) 匹配的独立模式,省去回朔.
•\w 匹配字符数字以及下划线
•\W 匹配非字母数字下划线
•\s 匹配任意空白字符,等价于[\t\n\r\f]
•\S 匹配任意非空白字符
•\d 匹配任意数字
•\D 匹配任意非数字
•\A 匹配字符串开始
•\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串.
•\z 匹配字符串结束
•\G 匹配最后匹配完成的位置
•\b 匹配一个单词边界,也就是指单词和空格之间的位置
•\B 匹配非单词边界
•\n \t 匹配一个换行符,一个制表符
•\1...\9 匹配第n个分组的内容

上面这些呢,是我们会用到的一些模式,这里面绝大部分都是应该熟记于心的。

接下来我们看re的一些方法:

re.compile

这个方法会生成一个正则对象,他的第一个参数是正则字符串,第二个参数是修饰符,就是 re.I, re.S 这些。

生成的这个正则对象呢,它还有一些方法,比如match、findall、finditer、search等等,这些方法的用法请往下看。

re.match

match方法是从给定字符串的开头开始进行匹配,并且只匹配一次。也就是说如果字符串和正则的第一个字母就对不上那就匹配失败了。

ta的参数是pettern,string,flags

•pettern 就是正则字符串,如果是通过re.compile方法生成的正则对象.match来调用的话,就不需要这个参数了,因为正则对象本身就代表了一个正则匹配模式。

•string 就是要进行匹配的目标字符串

•flags 就是正则的修饰符,比如 re.I

match 如果匹配失败返回None,匹配惩罚返回的则是一个match对象。

match对象有一些方法,比较常用的有:span、group、groups等等
•span 方法返回的一个二元组,分别表示匹配字符串在目标字符串中的起始下标和结束下标
•group 函数有一个int类型的参数,参数为0表示返回正则匹配的字符串,参数为1返回正则中第一个组匹配的内容,2返回第二组的内容一次类推
•groups 函数是所有group函数结果组成一个元组。

re.search

search 函数和 match 函数是类似的,区别在于match方法是只在目标函数开头匹配一次;search函数是在整个目标函数上匹配一次,一次匹配成功后不再进行匹配。

同样search方法返回的也是一个match对象,用法和match方法返回的结果一样。

re.split

split 函数是用来分割字符串的一个函数。它的功能就是根据匹配的字符串对目标字符串进行分割,返回的结果是一个列表。

需要注意的是,如果正则中有组,组内的字符在结果列表中也会保留,不是组内的字符在结果列表中不会被保留。什么意思呢?通过一个例子来看一下:

st = 'www.baidu.com www.taobao.com'
result = re.split('bai(du)', st)
print(result)

结果:

['www.', 'du', '.com www.taobao.com']

可以看到,字符串‘du'是被括号括起来的,所以在结果中也有'du'这个元素,而'bai'没有被括号括起来,在结果中就不会有‘bai'这个元素。

re.findall

这个函数是我在爬虫项目中用的最多的一个函数了,它可以把所有匹配的结果以列表的形式返回,而不是像match和search一样只匹配一个结果。我们来试一下:

st = 'www.baidu.com www.taobao.com'
result = re.findall(r'www\.(\w*)\.(com)', st)
print(result)
[('baidu', 'com'), ('taobao', 'com')]
re.finditer

这个函数和findall的功能一样。不同之处在于这个函数返回的结果是一个生成器,而生成器中的每一项是一个match对象,我们一起来看一下:

st = 'www.baidu.com www.taobao.com'
result = re.finditer(r'www\.(\w*)\.(com)', st)
print(result.__next__().group(0, 1, 2))
print(next(result).groups(2))
('www.baidu.com', 'baidu', 'com')
('taobao', 'com')
re.sub

这个函数是用来替换字符串的。可以将匹配的字符串替换成指定的字符串,我们来看一下:

st = 'www.111.com www.222.com'
result = re.sub(r'\d+', 'OK', st)
print(result)

结果:

www.OK.com www.OK.com

我们的第二个参数除了可以是一个给定的字符串还可以是一个函数:

def toOK(matched):
  value = matched.group()
  return str(int(value)*2)
st = 'www.111.com www.222.com'
result = re.sub(r'\d+', toOK, st)
print(result)

结果:

www.222.com www.444.com

总结

以上所述是小编给大家介绍的python正则-re的用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python 正则式 概述及常用字符
May 07 Python
多版本Python共存的配置方法
May 22 Python
django进阶之cookie和session的使用示例
Aug 17 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
django 类视图的使用方法详解
Jul 24 Python
python获取array中指定元素的示例
Nov 26 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
python使用列表的最佳方案
Aug 12 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 Python
Python入门基础之数字字符串与列表
Feb 01 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 #Python
django之对FileField字段的upload_to的设定方法
Jul 28 #Python
Django ImageFiled上传照片并显示的方法
Jul 28 #Python
Python线上环境使用日志的及配置文件
Jul 28 #Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 #Python
处理python中多线程与多进程中的数据共享问题
Jul 28 #Python
在django中图片上传的格式校验及大小方法
Jul 28 #Python
You might like
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
JAVA/JSP学习系列之六
2006/10/09 PHP
PHP个人网站架设连环讲(三)
2006/10/09 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
php时区转换转换函数
2014/01/07 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
Python开发编码规范
2006/09/08 Python
Python中的变量和作用域详解
2016/07/13 Python
python生成n个元素的全组合方法
2018/11/13 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
装修设计师求职信
2014/02/26 职场文书
3分钟演讲稿
2014/04/30 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
民主评议党员工作总结
2014/10/20 职场文书
交通事故协议书范本
2014/11/18 职场文书
护理工作个人总结
2015/03/03 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
Spring中的@Transactional的工作原理
2022/06/05 Java/Android