1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python 正则替换_5分钟速览Python正则表达式常用函数!五分钟就掌握它!

python 正则替换_5分钟速览Python正则表达式常用函数!五分钟就掌握它!

时间:2019-05-17 00:27:38

相关推荐

python 正则替换_5分钟速览Python正则表达式常用函数!五分钟就掌握它!

导读:正则表达式是处理字符串类型的"核武器",不仅速度快,而且功能强大。本文不过多展开正则表达式相关语法,仅简要介绍python中正则表达式常用函数及其使用方法,以作快速查询浏览。

01 Re概览

Re模块是python的内置模块,提供了正则表达式在python中的所有用法,默认安装位置在python根目录下的Lib文件夹(如 ..PythonPython37Lib)。主要提供了3大类字符串操作方法:

字符查找/匹配字符替换字符分割

由于是面向字符串类型的模块,就不得不提到字符串编码类型。re模块中,模式串和搜索串既可以是 Unicode 字符串(常用str类型),也可以是8位字节串 (bytes,2位16进制数字,例如xe5), 但要求二者必须是同类型字符串。

02 字符串查找/匹配

预编译:compile

在介绍查找和匹配函数前,首先需要知道re的compile函数,该函数可以将一个模式串编译成正则表达式类型,以便后续快速匹配和复用

importrepattern=pile(r'[a-z]{2,5}')type(pattern)#re.Pattern

此例创建了一个正则表达式式对象(re.pattern),命名为pattern,用于匹配2-5位小写字母的模式串。后续在使用其他正则表达式函数时,即可使用pattern进行方法调用。

匹配:match

match函数用于从文本串的起始位置开始匹配,若匹配成功,则返回相应的匹配对象,此时可调用group()方法返回匹配结果,也可用span()方法返回匹配起止下标区间;否则返回None

importrepattern=pile(r'[a-z]{2,5}')text1='thisisaretest'res=pattern.match(text1)print(res)#ifres:print(res.group())#thisprint(res.span())#(0,4)text2='是的,thisisaretest'print(pattern.match(text2))#None

match函数还有一个变形函数fullmatch,当且仅当模式串与文本串刚好全部匹配时,返回一个匹配对象,否则返回None

搜索:search

match只提供了从文本串起始位置匹配的结果,如果想从任意位置匹配,则可调用search方法,与match方法类似,当任意位置匹配成功,则立即返回一个匹配对象,也可调用span()方法获取起止区间、调用group方法获得匹配文本串

importrepattern=pile(r's[a-z]{2}')text1='thisisaretest'res=pattern.search(text1)print(res)#ifres:print(res.group())#isprint(res.span())#(4,7)pattern2=pile(r's[a-z]{5}')text2='是的,thisisaretest'print(pattern2.search(text2))#None

match和search均用于匹配单个结果,唯一区别在于前者是从起始位置开始匹配,而后者从任意位置匹配,匹配成功则返回一个match对象。

全搜索:findall/finditer

几乎是最常用的正则表达式函数,用于寻找所有匹配的结果,例如在爬虫信息提取中,可非常方便地提取所有匹配字段

importrepattern=pile(r's[a-z]{2,5}')text1='thisisaretest'res=pattern.findall(text1)print(res)#['is','re','test']

findall返回的是一个列表对象类型,当无匹配对象时,返回一个空列表。为了避免因同时返回大量匹配结果占用过多内存,可以调用finditer函数返回一个迭代器类型,其中每个迭代元素是一个match对象,可继续调用group和span方法获取相应结果

importrepattern=pile(r's[a-z]{2,5}')text1='thisisaretest'res=pattern.finditer(text1)forrinres:print(r.group())"""isretest"""

当匹配模式串较为简单或者仅需单词调用时,上述所有方法也可直接调用re类函数,而无需事先编译。此时各方法的第一个参数为模式串。

importrepattern=pile(r'd{2,5}')text='thisisretest're.findall('[a-z]+',text) #['this', 'is', 're', 'test']

03 字符串替换/分割

替换:sub/subn

当需要对文本串进行条件替换时,可调用re.sub实现(当然也可先编译后再用调用实例方法),相应参数分别为模式串、替换格式、文本串,还可以通过增加缺省参数限定替换次数和匹配模式。通过在模式串进行分组,可实现字符串的格式化替换(类似字符串的format方法),以实现特定任务。

importretext='todayis-03-05'print(re.sub('-','',text))#'todayis'print(re.sub('-','',text,1))#'todayis20-05'print(re.sub('(d{4})-(d{2})-(d{2})',r'2/3/1',text))#'todayis03/05/'

re.sub的一个变形方法是re.subn,区别是返回一个2元素的元组,其中第一个元素为替换结果,第二个为替换次数

importretext='todayis-03-05'print(re.subn('-','',text))#('todayis',2)

分割:split

还可以调用正则表达式实现字符串的特定分割,相当于.split()方法的一个加强版,实现特定模式的分割,返回一个切割后的结果列表

importretext='todayisaretest,whatdoyoumind?'print(re.split(',',text))#['todayisaretest','whatdoyoumind?']

04 总结

python中的re模块提供了正则表达式的常用方法,每种方法都包括类方法调用(如re.match)或模式串的实例调用(pattern.match)2种形式常用的匹配函数:match/fullmatch常用的搜索函数:search/findall/finditer常用的替换函数:sub/subn常用的切割函数:split还有其他很多方法,但不是很常用,具体可参考官方文档另外,python还有第三方正则表达式库regex可供选择

源码获取私信小编01哦

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。