当前所在位置: 首页 > 儿童教育 > 正文

Python常用的正则表达式处理函数详解

2022-11-15 canyinms.com 【 字体:

正则表达式是一个特殊的字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便。

在Python中,我们通过调用re库来使用re模块:

import re

下面介绍Python常用的正则表达式处理函数。

re.match函数

re.match 函数从字符串的起始位置匹配正则表达式,返回match对象,如果不是起始位置匹配成功的话,match()就返回None。

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

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。具体参数为:

re.I:忽略大小写。

re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境。

re.M:多行模式。

re.S:即 . ,并且包括换行符在内的任意字符(. 不包括换行符)。

re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库。

re.X:为了增加可读性,忽略空格和 # 后面的注释。

import re
#从起始位置匹配
r1=re.match('abc','abcdefghi')
print(r1)
#不从起始位置匹配
r2=re.match('def','abcdefghi')
print(r2)

运行结果:

其中,span表示匹配成功的整个子串的索引。

使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num):匹配的整个表达式的字符串,group() 可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。

groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

import re

s='This is a demo'
r1=re.match(r'(.*) is (.*)',s)
r2=re.match(r'(.*) is (.*?)',s)

print(r1.group())
print(r1.group(1))
print(r1.group(2))
print(r1.groups())
print()
print(r2.group())
print(r2.group(1))
print(r2.group(2))
print(r2.groups())

运行结果:

上述代码中的(.*)和(.*?)表示正则表达式的贪婪匹配与非贪婪匹配。

re.search函数

re.search函数扫描整个字符串并返回第一个成功的匹配,如果匹配成功则返回match对象,否则返回None。

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

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

import re
#从起始位置匹配
r1=re.search('abc','abcdefghi')
print(r1)
#不从起始位置匹配
r2=re.search('def','abcdefghi')
print(r2)

运行结果:

使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num=0):匹配的整个表达式的字符串,group() 可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。

groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

import re

s='This is a demo'
r1=re.search(r'(.*) is (.*)',s)
r2=re.search(r'(.*) is (.*?)',s)

print(r1.group())
print(r1.group(1))
print(r1.group(2))
print(r1.groups())
print()
print(r2.group())
print(r2.group(1))
print(r2.group(2))
print(r2.groups())

运行结果:

从上面不难发现re.match与re.search的区别:re.match只匹配字符串的起始位置,只要起始位置不符合正则表达式就匹配失败,而re.search是匹配整个字符串,直到找到一个匹配为止。

re.compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 这两个函数使用。

re.compile(pattern[, flags])

pattern:一个字符串形式的正则表达式。

flags:可选,表示匹配模式,比如忽略大小写,多行模式等。

import re
#匹配数字
r=re.compile(r'\d+') 
r1=r.match('This is a demo')
r2=r.match('This is 111 and That is 222',0,27)
r3=r.match('This is 111 and That is 222',8,27)
 
print(r1)
print(r2)
print(r3)

运行结果:

findall函数

搜索字符串,以列表形式返回正则表达式匹配的所有子串,如果没有找到匹配的,则返回空列表。

需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。

findall(string[, pos[, endpos]])

string:待匹配的字符串。

pos:可选参数,指定字符串的起始位置,默认为0。

endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。

import re
#匹配数字
r=re.compile(r'\d+') 
r1=r.findall('This is a demo')
r2=r.findall('This is 111 and That is 222',0,11)
r3=r.findall('This is 111 and That is 222',0,27)
 
print(r1)
print(r2)
print(r3)

运行结果:

re.finditer函数

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

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

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等。

import re 

r=re.finditer(r'\d+','This is 111 and That is 222')
for i in r: 
 print (i.group())

运行结果:

re.split函数

将一个字符串按照正则表达式匹配的子串进行分割后,以列表形式返回。

re.split(pattern, string[, maxsplit=0, flags=0])

pattern:匹配的正则表达式。

string:待匹配的字符串。

maxsplit:分割次数,maxsplit=1分割一次,默认为0,不限次数。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等。

import re 

r1=re.split('\W+','This is 111 and That is 222') 
r2=re.split('\W+','This is 111 and That is 222',maxsplit=1) 
r3=re.split('\d+','This is 111 and That is 222') 
r4=re.split('\d+','This is 111 and That is 222',maxsplit=1) 
print(r1)
print(r2)
print(r3)
print(r4)

运行结果:

re.sub函数

re.sub函数用于替换字符串中的匹配项。

re.sub(pattern, repl, string, count=0, flags=0)

pattern:正则中的模式字符串。

repl:替换的字符串,也可为一个函数。

string:要被查找替换的原始字符串。

count:模式匹配后替换的最大次数,默认0表示替换所有的匹配。

import re 

r='This is 111 and That is 222'
# 删除字符串中的数字
r1=re.sub(r'\d+','',r)
print(r1)
# 删除非数字的字符串 
r2=re.sub(r'\D','',r)
print(r2)

运行结果:

到此这篇关于Python常用的正则表达式处理函数详解的文章就介绍到这了,希望大家以后多多支持好二三四!

阅读全文
相关推荐

橘子洲旅游攻略 长沙橘子洲怎么玩

橘子洲旅游攻略 长沙橘子洲怎么玩
橘子洲是湘江中的一个冲击沙洲,四面环水绵延数十里,是国家重点风景名胜区。景区内有历史文化陈列馆、潇湘名人会所、柑橘文化园等景观,集观赏休闲娱乐于一体。在特定时间段,橘子洲烟火是一场绝不可错过的视觉盛宴。景区原面积约17公顷,其中开放区面积约6公顷,主要景点有洲头颂橘亭、汉白玉诗词碑、铜像广场、藤架广场、揽岳亭、枕江亭、盆景园、大门广场等。

西安周边旅游攻略 西安周边最值得去的地方

西安周边旅游攻略 西安周边最值得去的地方
1、华山风景名胜区:“华山论剑谁为峰,一见重阳道成空”,武侠小说为华山披上了浓厚的江湖色彩,同时华山用它的险峻向每一位前来攀登的游客发起挑战。整个华山拥有多达200余处景点,东峰的日出、西峰的峭壁、南峰的林木、北峰的云雾,每一处景色都独具魅力。打卡建议:在西峰乘坐索道上山,再从北峰乘坐索道下山,一天游玩下来大致需要6—8个小时,并且可以把景点都逛到。如果选择夜爬华山看日出的话,记得带一件厚一点的衣服,越往上爬山上越冷。还有记得爬山戴双手套,因为华山有些路段需要双脚并用才能攀登的上去。

毛坦厂中学万人雨中送考 毛坦厂送考头车车牌91666祝福考生

毛坦厂中学万人雨中送考 毛坦厂送考头车车牌91666祝福考生
六安市毛坦厂中学,简称“毛中”,位于安徽省六安市金安区毛坦厂镇,被称为“亚洲最大高考工厂”。每次送考时节也都会有万余名家长和当地居民前来送考,毛坦厂镇的万人送考成为当地乃至安徽省内的一个“高考景观”。  毛坦厂中学万人雨中送考  6月5日,安徽六安。今早7点半,毛坦厂中学送考车队又一次出发,考生

珠峰被救女子不愿支付全部救援费用 珠峰攀登者为救遇险女子放弃登顶

珠峰被救女子不愿支付全部救援费用 珠峰攀登者为救遇险女子放弃登顶
近日,湖南省登山队2名队员范江涛、谢如祥在距离登顶珠峰不到400米时,为救一名同中国籍的女子放弃登顶。此事引起网友广泛关注,网友纷纷为两人的义举支持点赞。但在成功救人后,被救女子的态度和表现,让两人倍感寒心。为请求救女子,他们当时允诺给夏尔巴向导1万美元,然而该女子事后只愿承担4000美元。

​登珠峰获救女子只愿承担4成救援费是怎么回事 登珠峰获救女子只愿承担4成救援费具体情况

​登珠峰获救女子只愿承担4成救援费是怎么回事 登珠峰获救女子只愿承担4成救援费具体情况
近日,湖南省登山队2名队员为救人放弃珠峰登顶计划引起热议。3日,有网友发布消息称:被救者只愿承担4成救援费。具体登珠峰获救女子只愿承担4成救援费是怎么回事?一起来了解登珠峰获救女子只愿承担4成救援费具体情况。登珠峰获救女子只愿承担4成救援费是怎么回事近日,湖南省登山队2名队员在距离登顶珠峰不到400

国内出现偏肺病毒感染 尚无治疗药物

国内出现偏肺病毒感染 尚无治疗药物
5月31日,据美国疾控中心(CDC)的呼吸道病毒监测系统显示,今年春季以来,人类偏肺病毒(HMPV)在美国各地区呈现高发态势,该病毒正肆虐美国各大医院的重症监护病房和儿科医院。  6月3日,某三甲医院感染控制中心主任医师告诉记者:“根据近几年国内零散报告,人偏肺病毒在呼吸道感染病人中确实是存在的

男子连吃100天麦当劳减重53斤是真的吗 男子连吃100天麦当劳为什么能减重53斤

男子连吃100天麦当劳减重53斤是真的吗 男子连吃100天麦当劳为什么能减重53斤
近日,据说美国一57岁男子通过连吃100天麦当劳的方式减肥,减了53斤。那么,男子连吃100天麦当劳减重53斤是真的吗?到底男子连吃100天麦当劳为什么能减重53斤?一起来了解具体情况。男子连吃100天麦当劳减重53斤是真的吗近日,据外媒报道,美国一名57岁男子通过连吃100天麦当劳的方式减肥,体重

本周狗屎运最旺的星座 本周狗屎运最旺的四大星座

本周狗屎运最旺的星座 本周狗屎运最旺的四大星座
本周(6.5-6.11)狗屎运最旺的星座TOP4如下:  TOP4:巨蟹座  金星冲冥王,巨蟹座走的狗屎运,可以说是超级大坨!不光是财运一飞冲天,主要事业运+学业运,迎来双运加速的爆发期!  TOP3:摩羯座  月亮六合水星,紧接着拱水星,摩羯运势仿佛踩上了蹦蹦床!正财运和偏财运,简直装备了跃迁

印度耗资百亿卢比的大桥又塌了是什么情况 印度耗资百亿卢比的大桥又塌了是为什么

印度耗资百亿卢比的大桥又塌了是什么情况 印度耗资百亿卢比的大桥又塌了是为什么
据印度媒体当地时间6月4日报道,印度比哈尔邦在建的横跨恒河的阿格瓦尼-苏丹甘吉大桥再次发生部分坍塌。据悉,此桥耗资百亿卢比。具体印度耗资百亿卢比的大桥又塌了是什么情况?到底印度耗资百亿卢比的大桥又塌了是为什么?一起来了解。印度耗资百亿卢比的大桥又塌了是什么情况据印度媒体6月5日报道,上周日下午6点左

一个村考出300多大学生6个北大 湖南一小村考上一本奖4000二本3000

一个村考出300多大学生6个北大 湖南一小村考上一本奖4000二本3000
一个村考出300多大学生6个北大是怎么回事?湖南一小村考上一本奖4000二本3000是什么情况?湖南益阳,爱屋湾村:一个让人自豪的地方,也是一个让人感动的地方。这个小村庄,历经数十年积淀,已经培养出了不少人才。据统计,爱屋湾村十年来累计奖励学生68名,其中有6人考上了北京大学,5人留学哈佛,其他
本文Tag