Python正则表达式,这一篇就够了!
大邓和他的Python
共 6464字,需浏览 13分钟
· 2021-01-15
腾讯课堂 | Python网络爬虫与文本分析(现在只需198元)~~
一、re模块简介
re
库,这是一个Python处理文本的标准库。标准库的意思表示这是一个Python内置模块,不需要额外下载,目前Python内置模块大概有300个。可以在这里查看Python所有的内置模块:https://docs.python.org/3/py-modindex.html#cap-r
import re
二、re模块常量
1. IGNORECASE
2. ASCII
\w
, \W
, \b
, \B
, \d
, \D
, \s
和 \S
只匹配ASCII,而不是Unicode。在默认匹配模式下
\w+
匹配到了所有字符串,而在ASCII模式下,只匹配到了a、b、c(ASCII编码支持的字符)。3. DOTALL
.
,ALL表示所有,连起来就是.
匹配所有,包括换行符\n
。默认模式下.
是不能匹配行符\n
的。.
并没有匹配换行符\n
,而是将字符串分开匹配;而在re.DOTALL模式下,换行符\n
与字符串一起被匹配到。.
并不会匹配换行符\n
。4. MULTILINE
\n
,默认模式下是不支持换行符特性的,比如:行开头 和 行结尾,而多行模式下是支持匹配行开头的。^
表示匹配行的开头,默认模式下它只能匹配字符串的开头;而在多行模式下,它还可以匹配 换行符\n
后面的字符。^
匹配行开头、\A
匹配字符串开头,单行模式下它两效果一致,多行模式下\A
不能识别\n
。5. VERBOSE
默认模式下并不能识别正则表达式中的注释,而详细模式是可以识别的。
6.LOCALE
\w
, \W
, \b
, \B
和大小写敏感匹配,这个标记只能对byte样式有效。这个标记官方已经不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 “习惯”,而且只对8位字节有效。7.UNICODE
8. DEBUG
9.TEMPLATE
10. 常量总结
9个常量中,前5个(IGNORECASE、ASCII、DOTALL、MULTILINE、VERBOSE)有用处,两个(LOCALE、UNICODE)官方不建议使用、两个(TEMPLATE、DEBUG)试验性功能,不能依赖。 常量在re常用函数中都可以使用,查看源码可得知。 常量可叠加使用,因为常量值都是2的幂次方值,所以是可以叠加使用的,叠加时请使用 |
符号,请勿使用+
符号!
三、re模块函数
1.查找一个匹配项
search: 查找任意位置的匹配项
match: 必须从字符串开头匹配
fullmatch: 整个字符串与正则完全匹配
a
,所以无法匹配,fullmatch函数需要完全相同,故也不匹配!案例3中,我们只留下一段文字,并且与正则表达式一致;这时fullmatch函数终于可以匹配了。
2.查找多个匹配项
findall: 从字符串任意位置查找,返回一个列表
finditer:从字符串任意位置查找,返回一个迭代器
如果可能存在大量的匹配项的话,建议使用finditer函数,一般情况使用findall函数基本没啥影响。
3.分割
str
模块也有一个 split函数 ,那这两个函数该怎么选呢?str.split函数功能简单,不支持正则分割,而re.split支持正则。
re.split
函数与str.split
函数执行次数 与 执行时间 对比图:通过上图对比发现,1000次循环以内
str.split
函数更快,而循环次数1000次以上后re.split
函数明显更快,而且次数越多差距越大!str.split
函数更合适,反之则使用re.split
函数。4.替换
5.编译正则对象
而template函数 与 compile函数 类似,只不过是增加了我们之前说的re.TEMPLATE 模式,我们可以看看源码。
6.其他
.
或者 *
,举个实际的案例:re.escape(pattern) 看似非常好用省去了我们自己加转义,但是使用它很容易出现转义错误的问题,所以并不建议使用它转义,而建议大家自己手动转义!
看方法大概是清除缓存吧,我们再来看看具体的案例:
猪哥在两个案例之间使用了re.purge() 函数清除缓存,然后分别比较前后案例源码里面的缓存,看看是否有变化!
7.总结
四、re模块异常
上图案例中我们可以看到,在编写正则表达式中我们多写了一个后括号,这导致执行结果报错;而且是在其他所有案例执行之前,所以说明是在正则表达式编译时期就报错了。
五、正则对象Pattern
re
模块的常量、函数、异常我们都讲解完毕,但是完全有必要再讲讲正则对象Pattern。1. 与re模块 函数一致
re
模块的函数中有一个重要的函数 compile函数 ,这个函数可以预编译返回一个正则对象,此正则对象拥有与re
模块相同的函数,我们来看看Pattern类的源码。re
模块的源码,你会发现其实compile函数 与 其他 re函数(search、split、sub等等) 内部调用的是同一个函数,最终还是调用正则对象的函数!也就是说下面 两种代码写法底层实现 其实是一致的:
# re函数
re.search(pattern, text)
# 正则对象函数
compile = re.compile(pattern)
compile.search(text)
2. 官方文档怎么说
官方文档推荐:在多次使用某个正则表达式时推荐使用正则对象Pattern 以增加复用性,因为通过 re.compile(pattern) 编译后的模块级函数会被缓存!
3. 实际测试又如何?
猪哥编写了两个函数,一个使用re.search函数 另一个使用 compile.search函数 ,分别(不同时)循环执行count次(count从1-1万),比较两者的耗时!
得出的结论是:100次循环以内两者的速度基本一致,当超出100次后,使用 正则对象Pattern 的函数 耗时明显更短,所以比re模块 要快!
六、注意事项
1.字节串 与 字符串
2.r 的作用
3.正则查找函数 返回匹配对象
4.重复使用某个正则
5.Python 正则面试
近期文章
Python网络爬虫与文本数据分析 bsite库 | 采集B站视频信息、评论数据 爬虫实战 | 采集&可视化知乎问题的回答 pdf2docx库 | 转文件格式,支持抽取文件中的表格数据 rpy2库 | 在jupyter中调用R语言代码 tidytext | 耳目一新的R-style文本分析库 reticulate包 | 在Rmarkdown中调用Python代码 plydata库 | 数据操作管道操作符>> plotnine: Python版的ggplot2作图库 七夕礼物 | 全网最火的钉子绕线图制作教程 读完本文你就了解什么是文本分析 文本分析在经管领域中的应用概述 综述:文本分析在市场营销研究中的应用 plotnine: Python版的ggplot2作图库 小案例: Pandas的apply方法 stylecloud:简洁易用的词云库 用Python绘制近20年地方财政收入变迁史视频 Wow~70G上市公司定期报告数据集 漂亮~pandas可以无缝衔接Bokeh YelpDaset: 酒店管理类数据集10+G
“分享”和“在看”是更好的支持!
评论
Python列表知识应知应会
点击上方“Go语言进阶学习”,进行关注回复“Go语言”即可获赠从入门到进阶共10本电子书今日鸡汤只在此山中,云深不知处。一、前言 在Python程序开发中,列表(List)经常会使用。假设一个班里有50个学生现需要统计每一个学生的总成绩情况,如果不使用列
Go语言进阶学习
0
Python 字符串应该用双引号还是单引号?
转载来源:洪尔摩斯PyCharm升级至 2023.2版本后,经常弹出来一个提示问我要不要试一下Black formatter。试了一下,这个Black formatter 很有个性,特别喜欢换行。我的一个文件用PyCharm自带的代码整理器整理完之后是500行左右,然后再用Black整理就变成600
菜鸟学Python
0
delorean,一个超级实用的 Python 库!
作者通常周更,为了不错过更新,请点击上方“Python碎片”,“星标”公众号大家好,今天为大家分享一个超级实用的 Python 库 - delorean。Github地址:https://github.com/myusuf3/delorean/时间在计算机科学和软件开发中是一个至关重要的概念。Pyt
Python 碎片
0
五一Python抢票神器来了
还在为五一回家抢不到火车票发愁吗?今天介绍一个Python抢票神器,希望对你有帮助。Py12306是一个流行的开源项目,旨在帮助用户更便捷地查询和预订中国铁路12306网站上的火车票。以下是使用Py12306的基本步骤和一些注意事项:安装与环境准备安装Python: 确保你的系统中安装了Python
Python小二
1
PyPy为什么能让Python比C还快?一文了解内在机制
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源:机器之心「如果想让代码运行得更快,您应该使用 PyPy。」—— Python 之父 Guido van Rossum对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Pyth
菜鸟学Python
0
CleverCSV,一个神奇的 python 库!
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源丨网络介绍CleverCSV 是一个基于 Python 的库,旨在提供比标准库 csv 更智能和灵活的方法来处理 CSV 文件。该库使用机器学习算法来探测 CSV 文件的正确拨号结构,从而
菜鸟学Python
0
python读取多个excel表多个sheet后映射匹配再分组计算、纵向拼接
大家好,我是飞奔的蜗牛ing。一、前言前几天在一个客户给到一单数据处理的 问题,需求是这样的:1.表“aa2020”中2020年数据需要按季度分成四个表。(1-3月、4-6月、7-9月、10-12月)2.表“2020年一季度”代表2020年一季度客户所对应的管理档位,需要把表中的档位导入附表“aa2
IT共享之家
0
五一抢票难,Python抢票脚本,火了!
大家好,今天继续聊聊科技圈发生的那些事。一、py12306话说回来,也快到五一了,不知道小伙伴们有没有出行计划呢?是选择回家,还是出去旅游呢?出行票的第一轮应该是放完了,我们就来赶赶末班车吧。py12306 这个项目其实就是一个抢票的工具,或许是临近出行购票热潮,这类项目又狠狠火了一把。工具的使用非
Jack Cui
10