再见,Python正则表达式!

简介: 再见,Python正则表达式!

re库

在Python中,re库又叫做正则表达式库,也属于Python标准库之一,不用安装就可以使用。


什么是正则表达式?

正则表达式是一组由字母和符号组成的特殊文本,可以帮助我们从某个复杂的字符串中,提取出满足我们要求的特殊文本。


用一个形象的比喻大致体会一下正则匹配的过程。苹果相当于写的“正则表达式”,字符串相当于“水果市场”,“正则匹配的过程”就相当于拿着苹果去“水果市场”找苹果的过程,每找到一个就返回一个,否则就什么也没有。


常用操作符介绍

正则表达式之所以这么强大,是因为拥有这么多专用操作符。为了方便大家记忆,我特意将操作符分为三类:


第一,元字符;

第二,量化符;

第三,特殊符;

1. 常用元字符

所谓“元字符”,指的是那些不仅仅可以表示字符本身含义、并且还可以表示其他特殊含义的字符。


常用的元字符有. [ ] () ^ $ | \ ? * +{ }共11种,为了更清楚地说明每个元字符的含义,我这里整理了一张表格供大家参考。

image.png

可以看到,上面一共说明了7种元字符的含义,还有4种并没有说明。那是为了方便大家记忆,我特意将上述最后4个元字符分类到了“量化符”中,这个将在下面一小节中进行讲述。


2. 常用量化符

所为“量化符”,指的就是将紧挨着量化符前面的那个字符,匹配0次、1次或者多次,详细说明见下表。


image.png

3. 常用特殊符

所为“特殊符”,指的就是由转义字符加某些字母组合而成的具有特殊意义的特殊字符,详细说明见下表。

image.png


常用方法介绍

在re库中,一共提供了三个函数用于查找匹配,分别是match()、search()还有findall(),下面我们分别对他们进行讲述。


1. 三大函数含义对比

在这三个函数中,用的最多的是findall()这个函数,其次是search()函数,match()函数则用的很少。下面我们一一说明它的含义:


match(pattern,string):匹配字符串的开头,如果开头匹配不上,则返回None

seach(pattern,string):扫描整个字符串,匹配后立即返回,不在往后面匹配;

findll(pattern,string):扫描整个字符串,以列表形式返回所有的匹配值;

其中,pattern表示用于匹配的正则表达式,string表示待匹配的字符串。


2. 三大函数用法对比

前面我们已经介绍了这三个函数的具体含义,现在用一个案例对比说明它们的不同之处。


导入相关库。


import re


如果有如下两个字符串。


s = "黄同学喜欢唱歌,黄同学喜欢写作,黄同学喜欢吃火锅!"
s1 = "喜欢唱歌,喜欢写作,喜欢吃火锅"


① 使用match()函数

首先我们使用直接匹配s字符串中的“喜欢”二字。


re.match("喜欢",s)


这行代码没有返回结果,表示返回结果是None值,那是由于match()只匹配开头,如果开头不是“喜欢”二字,那么就返回None。


re.match("喜欢",s) == None


返回结果是:True。


如果我们再使用match()函数,匹配s1字符串中的“喜欢”二字。


re.match("喜欢",s1)


返回结果是:<re.Match object; span=(0, 2), match=‘喜欢’>。


上述结果得到的是一个匹配对象,如果我们想要获取其中的匹配值,就必须调用匹配对象的group()方法,获取具体的匹配值。


re.match("喜欢",s1).group()


返回结果是:’喜欢’


② 使用search()函数

接着我们使用直接匹配s字符串中的“喜欢”二字。


re.search("喜欢",s)


返回结果是:<re.Match object; span=(3, 5), match=‘喜欢’>。


上述结果同样返回的是一个匹配对象,仍然需要调用group()方法,获取到具体的匹配值。


re.search("喜欢",s).group()


返回结是:‘喜欢’


③ 使用finall()函数

最后我们再使用直接匹配s字符串中的“喜欢”二字。


re.findall("喜欢",s)


返回结果是:[‘喜欢’, ‘喜欢’, ‘喜欢’]


3. 其他常用方法

除了上述三个用于查找匹配的函数之外,还有用于切分的split()函数,有用于替换的sub()函数。另外还有两个常用修饰符re.I和re.S,简单了解一下。下面我们一一介绍它们的含义:


split(pattern,string):按照某个匹配的正则表达式,将整个字符串切分后,以列表返回;

sub(pattern,repl,string):按照某个匹配的正则表达式,将整个字符串的某个字串替换为另外一个字串;

re.I:让正则表达式自动忽略大小写;

re.S:让“.”能够匹配包括换行符在内的任意字符;

其中,pattern表示用于匹配的正则表达式,string表示待匹配的字符串,repl表示替换后的字串。


假如有这样3个字符串:


s = "赵1钱2孙4李8周16吴32郑64王128黄"
s1 = "Huang是huang"
s2 = "黄\n同学"


需求1:将字符串s按照数字切分,以一个汉字组成的列表返回。

我们知道\d是匹配某一个数字,但是上述字符串里面,有2位的数字还有3位的数字,于是你会想到使用\d+表示匹配>=1个数字,因此整个代码如下:


re.split("\d+",s)


返回结果是:[‘赵’, ‘钱’, ‘孙’, ‘李’, ‘周’, ‘吴’, ‘郑’, ‘王’, ‘黄’]。


需求2:将字符串s中的数字部分,全都替换为空。

同样我们仍然用\d+表示匹配>=1个数字,这道题的代码如下:


re.sub("\d+"," ",s)


返回结果是:‘赵 钱 孙 李 周 吴 郑 王 黄’


需求3:将字符串s1中的h匹配出来,不区分大小写;

如果不加re.I,系统会将它们看待成不同的字符。


re.findall("h",s1)


返回结果是:[‘h’]


如果加了re.I,系统会忽略大小写,那么h和H就是同一个字符。


re.findall("h",s1,re.I)


返回结果是:[‘H’, ‘h’]


需求4:将字符串s2整个匹配出来,包括换行符;

如果不加re.S,“.”不能匹配“\n”换行符。


re.findall(".+",s2)


返回结果是:[‘黄’, ‘同学’]


如果加了re.S,“.”此时能够匹配“\n”换行符。


re.findall(".+",s2,re.S)


返回结果是:[‘黄\n同学’]


相关文章
|
4月前
|
Python
"揭秘!Python如何运用神秘的正则表达式,轻松穿梭于网页迷宫,一键抓取隐藏链接?"
【8月更文挑战第21天】Python凭借其强大的编程能力,在数据抓取和网页解析领域表现出高效与灵活。通过结合requests库进行网页请求及正则表达式进行复杂文本模式匹配,可轻松提取网页信息。本示例展示如何使用Python和正则表达式解析网页链接。首先确保已安装requests库,可通过`pip install requests`安装。接着,利用requests获取网页内容,并使用正则表达式提取所有`&lt;a&gt;`标签的`href`属性。
57 0
|
1月前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
53 5
|
1月前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
2月前
|
Python
【收藏备用】Python正则表达式的7个实用技巧
【收藏备用】Python正则表达式的7个实用技巧
33 1
|
2月前
|
数据安全/隐私保护 Python
Python实用正则表达式归纳
Python实用正则表达式归纳
20 3
|
2月前
|
Python
Python 正则表达式高级应用指南
正则表达式是文本模式匹配的强大工具,Python 的 `re` 模块支持其操作。本文介绍正则表达式的高级应用,包括复杂模式匹配(如邮箱、电话号码)、分组与提取、替换操作、多行匹配以及贪婪与非贪婪模式的区别。通过示例代码展示了如何灵活运用这些技巧解决实际问题。
33 7
|
2月前
|
JavaScript 前端开发 Scala
Python学习十:正则表达式
这篇文章是关于Python中正则表达式的使用,包括re模块的函数、特殊字符、匹配模式以及贪婪与非贪婪模式的详细介绍。
21 0
|
2月前
|
数据采集 开发者 Python
Python正则表达式之re.compile函数
`re.compile`是Python正则表达式处理中一个强大的工具,它通过预先编译正则表达式,不仅提升了执行效率,还增强了代码的组织性和可读性。掌握其使用,对于涉及文本分析、数据清洗、日志处理等领域的Python开发者来说,是非常必要的技能。正确并高效地应用这一功能,可以显著提升程序的性能和维护性。
145 0
|
3月前
|
索引 Python
30天拿下Python之正则表达式
30天拿下Python之正则表达式
20 0
|
3月前
|
数据采集 Python
Python正则表达式提取车牌号
Python正则表达式提取车牌号
49 0