在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
Python正则表达式是简介表达一组字符串的表达式,正则表达式可以方便的检查一个字符串是否与某种模式匹配。本文将结合实例给大家讲解六种在正则表达式中的常见函数,分别是re.match、re.search、re.findall、re.compile、re.split和re.sub。

re.match() tch函数从头开始匹配,如果不是起始位置匹配成功的话,match函数的匹配结果就为none。
re.search() 整个字符串,并返回第一个成功的匹配
re.findall() 整个字符串,返回一个list(最常用的)
re.compile() #compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象
re.split() #将一个字符串按照正则表达式匹配的结果进行分割,返回列表类型
re.sub() #在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
1、re.match函数
match函数从头开始匹配,如果不是起始位置匹配成功的话,match函数的匹配结果就为none。匹配成功,re.match方法返回一个匹配的对象。
语法如下:re.match(pattern, string, flags=0)
pattern:需要匹配的正则表达式;
string:在那个字符串中就行匹配 ;
flags:标志位(默认为0),它可以控制正则表达式的匹配方式
常见的flags如下:
re.I 忽略匹配时的大小写
re.M 多行匹配,影响 ^ 和 $
re.S . 默认不匹配换行,使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B
示例如下:
我们可以看出,match函数匹配成功的话,re.match方法返回一个匹配的对象,而不是匹配的正则表达式;通过span()可以获取匹配的位置。
>>> import re
>>> astr='11you are 3344 my apple\n 11开心果,you\n66a77'
>>> re.match('11',astr)
<_sre.SRE_Match object; span=(0, 2), match='11'>
>>> re.match('11',astr).span()
(0, 2)
>>> print(re.match('you',astr))
None
2、re.search函数
搜索整个字符串,并返回第一个成功的匹配。
语法如下:re.search(pattern, string, flags=0)
pattern:需要匹配的正则表达式;
string:在那个字符串中就行匹配 ;
flags:标志位(默认为0),它可以控制正则表达式的匹配方式
常见的flags如下:
re.I 忽略匹配时的大小写
re.M 多行匹配,影响 ^ 和 $
re.S . 默认不匹配换行,使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B
示例如下:
我们可以看出,search函数匹配成功的话,re.search方法返回一个匹配的对象,而不是匹配的正则表达式;通过span()可以获取匹配的位置。如果没有匹配到,则返回为None。
>>> import re
>>> astr='11you are 3344 my apple\n 11开心果,you\n66a77'
>>> re.search('11',astr)
<_sre.SRE_Match object; span=(0, 2), match='11'>
>>> re.search('you',astr)
<_sre.SRE_Match object; span=(2, 5), match='you'>
>>> re.search('you',astr).span() #通过span()获取匹配的位置
(2, 5)
>>> re.search('11',astr).span()
(0, 2)
>>> print(re.search('22',astr))
None
3、re.findall函数
搜索整个字符串,返回一个list
语法如下:re.findall(string)
>>> import re
>>> astr='1you are 3344 my apple\n 11开心果,you\n66a77'
>>> re.findall('\d\d',astr) #列表形式显示所有的两个数字
['33', '44', '11', '66', '77']
>>> re.findall('\d{2,4}',astr) #列表形式显示所有的2——4个数字,默认贪婪匹配
['3344', '11', '66', '77']
>>> re.findall('\d+',astr) #(1,无穷)
['1', '3344', '11', '66', '77']
>>> re.findall('\d*',astr) #(0,无穷)
['1', '', '', '', '', '', '', '', '', '3344', '', '', '', '', '', '', '', '', '', '', '', '11', '', '', '', '', '', '', '', '', '66', '', '77', '']
>>> re.findall('\d?',astr) #匹配0或1
['1', '', '', '', '', '', '', '', '', '3', '3', '4', '4', '', '', '', '', '', '', '', '', '', '', '', '1', '1', '', '', '', '', '', '', '', '', '6', '6', '', '7', '7', '']
>>> re.findall('\d{2,3}?',astr) #一个模式后跟?,不贪婪匹配,范围后面?,有两次就先取两次
['33', '44', '11', '66', '77']
>>> re.findall('\d.\d',astr) #匹配两个数字与中间任意字符
['334', '6a7']
>>> re.findall('^\d',astr) #以数字开头
['1']
>>> re.findall('^\d',astr,re.M) #多行匹配
['1', '6']
>>> re.findall('\d$',astr) #以数字结尾
['7']
>>> re.findall('\d$',astr,re.M) #多行匹配,影响^和$
['7']
>>> re.findall('\d(.)(\d)',astr,re.S)#列表形式返回,每项为一个元组
[('3', '4'), ('a', '7')]
4、re.compile函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象。
语法如下:re.compile(pattern,flags=0)
pattern:需要匹配的正则表达式;
flags:标志位(默认为0),它可以控制正则表达式的匹配方式
常见的flags如下:
re.I 忽略匹配时的大小写
re.M 多行匹配,影响 ^ 和 $
re.S . 默认不匹配换行,使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B
示例如下:
>>> import re
>>> astr='AS12as34er567q!"3456'
>>> m1=re.compile(r'\d\d') #编译
>>> m1.search(astr).group() #匹配
'12'
>>> m1.findall(astr)
['12', '34', '56', '34', '56']
>>> m2=re.compile(r'a',re.I) #编译
>>> m2.findall(astr) #匹配
['A', 'a']
5、re.split函数
将一个字符串按照正则表达式匹配的结果进行分割,返回列表类型。
语法如下:re.split(pattern, string ,?maxsplit=0?,flags=0)
pattern:需要匹配的正则表达式;
string:在那个字符串中就行匹配 ;
maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
flags:标志位(默认为0),它可以控制正则表达式的匹配方式。
常见的flags如下:
re.I 忽略匹配时的大小写
re.M 多行匹配,影响 ^ 和 $
re.S . 默认不匹配换行,使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B
示例如下:
>>> import re
>>> astr='AS12as34er567q!"3456'
>>> astr.split('12') #通过12进行分割
['AS', 'as34er567q!"3456']
>>> re.split("\d{2}",astr) #通过两个数字进行分割
['AS', 'as', 'er', '7q!"', '', '']
>>> re.split("\d+",astr) #通过数字进行分割
['AS', 'as', 'er', 'q!"', '']
>>> m3=re.compile(r'\d+') #与上面等价,运用了compile函数
>>> m3.split(astr)
['AS', 'as', 'er', 'q!"', '']
>>> m3.split(astr,3) #指定分割几次
['AS', 'as', 'er', 'q!"3456']
6、re.sub函数
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串。
语法如下:re.sub(pattern, repl, string, count=0,flags=0)
pattern:需要匹配的正则表达式;
repl : 替换的字符串,也可为一个函数。
string:在那个字符串中就行匹配 ;
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags:标志位(默认为0),它可以控制正则表达式的匹配方式
常见的flags如下:
re.I 忽略匹配时的大小写
re.M 多行匹配,影响 ^ 和 $
re.S . 默认不匹配换行,使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B
示例如下:
>>> import re
>>> astr='AS12as34er567q!"3456'
>>> re.sub("5",'9',astr) #将5替换为9
'AS12as34er967q!"3496'
>>> m4=re.compile(r"\d+")
>>> m4.sub(' ',astr) #将数字替换为空字符串
'AS as er q!" '
>>> m4.sub(' ',astr,2) #指定替换几次
'AS as er567q!"3456'
以上就是Pthon正则表达式六种函数实例讲解,大家都懂了吗?如果对Python正则表达式还有任何疑问,可以上博学谷官网报名Python的课程,相信一定能解决大家关于学习Python的疑问。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Python入门基础练习题整理附答案
在初学者Python入门的时候,一方面要多注重积累理论基础知识,另一方面就是要多练手。因此本文整理了Python入门的基础练习题,相信对初学者会有很大的帮助。
14268
2019-08-14 18:15:39
Python中GC的垃圾回收算法分析
相信大家在面试中常常会碰到有关垃圾回收的问题,的确,Python和其他很多编程语言一样,都自带垃圾回收机制。本文主要和大家来分析一下Python中的垃圾回收算法。首先我们要知道,GC计算机术语指的是垃圾回收。而Python中的垃圾回收是以引用计数为主,但是为了弥补其算法的不足,所以又引入了标记-清除和分代收集算法为辅。
7149
2020-01-13 11:00:30
适合新手练习的Python项目有哪些?
适合新手练习简单易上手的Python项目汇总:Web 项目设计:内容聚合器、正则表达式查询工具、网址缩短、便利贴、功能、测验、GUI 项目设计:MP3 播放器、闹铃提醒工具、文件管理器、记账功能、命令行项目设计:通讯录、网站连接检查、批量文件重命名工具、目录树生成器。
6277
2020-03-10 10:53:51
CSS引入方式有几种?怎么使用?
CSS引入方式有几种?怎么使用?我们需要掌握CSS三种引入方式分别是行内式、内嵌式、外链式。选择CSS引入方式这样判断行内式几乎不用,内嵌式在学习CSS样式的阶段使用,外链式在公司开发的阶段使用,可以对CSS样式和html页面分别进行开发。
5849
2021-12-08 10:31:24
闭包是什么?具体怎么使用?
闭包是什么?具体怎么使用?闭包是使用外部函数变量的内部函数,闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。
4115
2022-02-11 15:42:50
热门文章
- 前端是什么
- 前端开发的工作职责
- 前端开发需要会什么?先掌握这三大核心关键技术
- 前端开发的工作方向有哪些?
- 简历加分-4步写出HR想要的简历
- 程序员如何突击面试?两大招带你拿下面试官
- 程序员面试技巧
- 架构师的厉害之处竟然是这……
- 架构师书籍推荐
- 懂了这些,才能成为架构师 查看更多
扫描二维码,了解更多信息
