Python实用技术一:正则表达式

简介: 用以表示“此处必须出现一个某某范围内的字符”,或者“此处必须出现一一个字符,但不可以是某某范围内的字符” ,但不可以十某某范围内的字符。

这一章主要讲一讲Python学习中比较深层次的内容,需要大家更加认真的学习。


一,正则表达式的基本概念和构成


正则表达式是个某些字符有特殊含义字符串,表示一种字符串的模式(格式),

如:


ff2ddf36b4124310972ad99a2e014b92.png


可以用相关函数求给定字符串和正则表达式的匹配情况


160cbe6846f84cef834fdeb6a93efeb8.png

aba4f1dae6f749a28c2b131744692ec2.png


二,正则表达式中的特殊字符


正则表达式中常见的特殊字符有以下几个:


cfadea1312684e568dd365fd8154cb5a.png


如果要在正则表达式中表示这几个字符本身,就应该在其前面

加    \


c4381edfdbcc4c52a1bc2a2af252f776.png


三,字符范围和量词


用以表示“此处必须出现一个某某范围内的字符”,或者“此处必须出现一一个字符,但不可以是某某范围内的字符” ,但不可以十某某范围内的字符。


6cb6d70609694eb8a4bc0c761d8511db.png


汉字的unicode编码范围是4e00- 9fa5(16进制)因此[ \u4e00-\u9fa5]即表示一个汉字。


量词的用法:


cc8f9ebcb32f4abebe6b55f3ddef42be.png


正则表达式的例子:


c31ecc54cd854a9da4c42e724896f141.png


四,正则表达式的函数


1,re.match函数


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


●从字符串str ing的起始位置匹配一一个模式pattern

●flags标志位, 用于控制模式串的匹配方式,如:是否区分大小写,多行匹配等等,如re.M| re. |表示忽略大小写, 且多行匹配

●成功则返回一个匹配对象,否则返回None


c63901abf29546779be4aae7a6534854.png


bffe8447b8b24ac797b2ca800d452916.png

a69122b343134a018a0f17fbc6613aec.png

09647057f73d4ac1968dd9d85d063280.png


2,re.search函数


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


查找字符串中可以匹配成功的子串。

若匹配成功,则返回匹配对象;若无法匹配,则返回None。


c0a36e585d2f49958b20b494fc1d4d4c.png


输出字串及起止位置。



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


查找字符串中所有和模式匹配的子串(不重叠)放入列表。一个子串都找不到就返回空表[]。


4,re.finditer函数


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


查找字符串中所有和模式匹配的子串(不重叠),每个子串对应于一个匹配对象,返回匹配对象的序列(准确说是“可调用迭代器”)


ee6a7a8ba6ec45d490a8716a5016e56d.png


5,re.sub函数


re. sub (模式串,替换串,母串) 用于替换匹配的子串


4ff0d1fb7d1f449abf69a0bb32ba4db5.png


五,边界符号


\A        表示字符串的左边界,即要求从此往左边不能有任何字符

\Z        表示字符串的右边界,即要求从此往右边不能有任何字符

^        与\A同。但多行匹配模式下还可以表示一行文字的左边界

$        与\Z同。但多行匹配模式下还可以表示一行文字的右边界


边界符号本身不会和任何字符匹配。

Python字符串"A', \Z'都是两个字符,而不是像"\n'那样的一个字符。


\b        表示此处应为单词的左边界或右边界,即不可是单词字符

\B        表示此处不允许是单词的左边界或右边界,即必须是单词字符


正则表达式的边界符号"b'是两个字符。但是在Python字符串中,'\b'和"\t,'n'类似,是一个字符(Backspace)。 因此在正则表达式中使用边界符号\b,要写"\b'。如果写'\\b', 则连续的两个"\被看作是一个普通的" \ “, 不会和后面的'b'一起被当作字符组合,变成边界符号'\b'。


print("\\b")         #>>\b


六,分组


1,括号中的表达式是一个分组。多个分组按左括号从左到右从1开始依次编号


f12db36ca14e4a4790c9b15e2dec5959.png


2, 在分组的右边可以通过分组的编号引用该分组所匹配的子串


29c31121f11c49389dc03a51c7437d7a.png

8ec5394bb2ef45f79eeffd33addbece2.png


3,分组作为一个整体,后面可以跟量词


85db4c1460924b2791b943d97bb40cba.png


不要求分组的多次出现必须匹配相同字符串


4,re.findall和分组


1)在正则表达式中没有分组时,re. findall返回所有匹配子串构成的列表。有且只有一一个分组时,re. finda11返回的是- -个子串的列表,每个元素是一个匹配子串中分组对应的内容。


644782743ab84edbaa4e76c3b69e7825.png


2)在正则表达式中有超过一个分组时,re . findall返回的是一个元组的列表,每个元组对应于一-个匹配的子串,元组里的元素,依次是1号分组、2号分组、3号分组......匹配的内容


4efac1978e7a480f88d78b643d11f815.png


七,‘ | ’的用法


1,表示“或”,如果没有放在" () "中,则起作用范围是直到整个正则表达式开头或结尾或另一个” | “


2c6cdfdcb384425f8f7c8005ad577e02.png


2,从左到右短路匹配(匹配上一个后就不计算是否还能匹配后面的)


b8d81584f8344afcb08c071a6012c45a.png


3,' | ‘也可以用于分组中,起作用范围仅限于分组内


f67be2fdd6d744528fec0cce35cafb2e.png


八,贪婪模式和懒惰模式


1,贪婪模式:


量词+,*,?, {m,n}默认匹配尽可能长的子串


7c59382a634b41359b75c5b6bf7f6ada.png


2,非贪婪(懒惰)模式:


在量词+,*,?, {m,n}后面加"?'则匹配尽可能短的字符串。


00f7d7b43bcc4a89ae488355d88dd76a.png

96f70bcd7d124ad6bb1168530c3bb187.png


九,匹配对象


groups([default]):

以元组形式返回全部分组匹配的字符串。相当于调用group(1 ,2,.. .last)。

default表示没有匹配字符串的组以这个值替代,默认为None。


groupdict([default]): .

返回以有名字的组的名字为键、以该组匹配的子串为值的字典,没有

名字的组不包含在内。default含义同上。


start([group]):

返回指定的组匹配的子串在string中的起始位置。group默认值 为0。


end([group]):

返回指定的组匹配的子串在string中的结束位置(子串最后一个字符的

位置+1)。group默认值为0。


span([group]):

返回(start(group), end(group))。

group可以是组编号,也可以是组名字,缺省为0


一般来说,要写一个精确的正则表达式是很困难的,所以我们可以讲正则表达式写的宽容一些,即,匹配到的不一定是正确的,但是正确的一定可以匹配到。

目录
相关文章
|
12天前
|
API Python
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
|
12天前
|
安全 数据挖掘 编译器
【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
|
24天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
1月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
82 2
|
2月前
|
数据可视化 图形学 Python
在圆的外面画一个正方形:Python实现与技术解析
本文介绍了如何使用Python的`matplotlib`库绘制一个圆,并在其外部绘制一个正方形。通过计算正方形的边长和顶点坐标,实现了圆和正方形的精确对齐。代码示例详细展示了绘制过程,适合初学者学习和实践。
56 9
|
2月前
|
数据可视化 数据处理 Python
Python编程中的数据可视化技术
在Python编程中,数据可视化是一项强大的工具,它能够将复杂的数据集转化为易于理解的图形。本文将介绍如何使用matplotlib和pandas这两个流行的Python库来实现数据可视化,并展示一些实用的代码示例。通过这些示例,读者将学会如何创建各种图表,包括折线图、柱状图和散点图等,以便更好地理解和呈现数据。
|
2月前
|
存储 数据挖掘 数据处理
Python中的计票技术
本文介绍了如何使用 Python 进行计票,包括使用字典、`collections.Counter` 和 `pandas` 等方法。通过多个示例详细展示了每种方法的具体应用,帮助读者掌握计票技巧。
35 1
|
2月前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
78 5
|
2月前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
45 2
|
2月前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。