re库的应用re库是Python处理正则表达式的标准库。我将简要介绍正则表达式的语法。如果你想深入学习正则表达式,你需要下功夫。正则表达式语法正则表达式语法由字符和运算符组成,初级阶段掌握以下内容即可。运算符描述示例。任何单个字符很少不能匹配[]字符集,给定取值范围[abc]用于单个字符匹配a、b、c,[a-z]表示a到z单个字符[\^]非字符集,给出单个字符的排除范围[\^abc]表示匹配单个不是a,非b,非c的字符*前一个字符为0次或无限扩展abc*表示ab,abc,abcc,abccc等+将前一个字符延长1次或无限次abc+表示abc、abcc、abccc等?前一个字符0次还是1次abc?表示ab,abc左右任意一个表达式abcdef表示abc或def{m}将第一个字符展开m倍ab{2}c,表示abbc{m,n}将第一个字符m展开n倍ab{1,2}c,表示abc,abbc\^匹配字符串开头\^abc表示abc在字符中字符串开头\$匹配字符串结尾abc$表示abc在字符串结尾()分组标记,里面只能用运算符(abc)表示abc,(ab)表示a,b\d数字,相当于[0-9]\w字符,相当于[A-Za-z0-9]以上表示只是正则表达式最基本的部分。如果想深入研究正则表达式,建议找比较全面的资料进行学习。本文仅供药铅。re库的基本使用re库的主要功能如下:基本功能:编译;功能函数:search,match,findall,split,finditer,sub。在正式学习之前,我们先了解一下原生字符串。在Python中,要表示一个原生字符串,需要在字符串前面加上r。比如my_str='i'amxiangpica'程序会直接报错。如果想让字符串中的'正常工作,需要加上移位符\,修改为my_str='i\'amxiangpica'。但是这样一来,和上面正则表达式中的运算符结合起来就会出现问题,因为\在正则表达式中是有实际意义的。如果使用re库匹配string中的\,需要使用4反斜杠,为了避免这种情况,引入了nativestring的概念。#不使用原生字符串的正则表达式"\\\\"#使用原生字符串的正则表达式r"\\"后面会实际应用。接下来我们来研究一个案例,比如下面的代码:my_str='C:\number'print(my_str)C:umber这段代码的输出效果如下,\n被解析成一个换行符,如果你想屏蔽这种现象,只需使用r:my_str=r'C:\number'print(my_str)输出C:\number。re库相关函数说明re.search函数该函数用于查找字符串中正则表达式匹配到的第一个位置的值,并返回匹配对象。函数原型如下:re.search(pattern,string,flags=0)要求:匹配字符串Charlie中的Charlieisnotgoodgood。importremy_str='Charlieisnotgoodgood'pattern=r'Charlie'ret=re.search(pattern,my_str)print(ret)返回结果:。搜索函数的第三个参数flags表示使用正则表达式时的控制标志。re.I,re.IGNORECASE:忽略正则表达式的大小写;re.M、re.MULTILINE:正则表达式中的\^运算符可以将给定字符串的每一行都视为匹配的开始;re.S,re.DOTALL:.正则表达式中的运算符可以匹配所有字符。最后输出匹配的字符串,可以使用如下代码实现。importremy_str='Charlieisnotgoodgood'pattern=r'Charlie'ret=re.search(pattern,my_str)ifret:print(ret.group(0))re.matchfunction该函数用于匹配目标string起始位置用于匹配正则表达式,返回一个匹配对象。如果没有匹配成功,则返回None。函数原型如下:re.match(pattern,string,flags=0)一定要注意目标字符串的起始位置。importremy_str='Charlieisnotgoodgood'pattern=r'猹'#匹配数据pattern=r'good'#没有匹配数据ret=re.match(pattern,my_str)ifret:print(ret.group(0))re.match和re.search方法一次最多返回一个匹配对象。如果要返回多个值,可以通过在模式中添加括号来构造匹配组来返回多个字符串。re.findall函数该函数用于搜索字符串,并以列表格式返回所有匹配的字符串。函数原型如下:re.findall(pattern,string,flags=0)测试代码如下:importremy_str='Charlieisnot猹goodgood'pattern=r'good'ret=re.findall(pattern,my_str)print(ret)re.split函数该函数根据正则表达式匹配结果对字符串进行拆分,并返回一个列表。函数原型如下:re.split(pattern,string,maxsplit=0,flags=0)re.split函数拆分时,如果正则表达式匹配的字符恰好在字符串的开头或结尾,splitcharacter会被返回stringlist开头和结尾的空格比较多,需要手动去掉,比如下面的代码:importremy_str='1Charlieisnot1good1good1'pattern=r'\d'ret=re.split(pattern,my_str)print(ret)results:['','查理不是猹','good','good','']切换到中间的内容,然后字符串即可正确拆分。importremy_str='1Charlieisnot1good1good1'pattern=r'good'ret=re.split(pattern,my_str)print(ret)如果pattern中捕获到括号,则括号中的匹配结果也会返回List。importremy_str='1Charlieisnot猹1good1good1'pattern=r'(good)'ret=re.split(pattern,my_str)print(ret)结果,可以比较带括号和不带括号的区别:['1Charlie1','good','1','good','1']maxsplit参数表示最大拆分次数,其余字符全部返回到列表的最后一个元素,比如设置为匹配1时间,得到结果是['1dreameraser1','1good1']。re.finditer函数搜索字符串并返回匹配结果的迭代器,其中每个迭代的元素是一个匹配对象。函数原型如下:re.finditer(pattern,string,flags=0)测试代码如下:importremy_str='1Charlieisnot1good1good1'pattern=r'good'#ret=re.split(pattern,my_str,maxsplit=1)ret=re.finditer(pattern,my_str)print(ret)re.sub函数替换字符串中正则表达式匹配的字符串,并返回替换后的字符串。函数原型如下:re.sub(pattern,repl,string,count=0,flags=0)其中repl参数为替换匹配字符串的字符串,count参数为最大替换次数匹配。importremy_str='1Charlieisnot1good1good1'pattern=r'good'ret=re.sub(pattern,"nice",my_str)运行print(ret)后,得到替换后的字符串:1Charlieisnot1nice1nice1reLibraryOtherfunctionsOther常用函数包括:re.fullmatch()、re.subn()、re.escape()。更多信息请参考官方文档获取第一手资料。re库的面向对象的写法是函数式的写法。re库可以使用面向对象的写法。编译正则表达式后,可以多次运行。核心使用的函数是re.compile。函数原型如下:regex=re.compile(pattern,flags=0)其中pattern为正则表达式字符串或原生字符串。测试代码如下:importremy_str='1Charlieisnot猹1good1good1'#Regularobjectregex=re.compile(pattern=r'good')ret=regex.sub("nice",my_str)print(ret)上面的代码将正则表达式编译成正则对象,后面的regex.sub函数中就不用再写正则表达式了。使用时只需要将所有的re对象替换成编译好的regex对象,然后调用相应的方法即可。re库的匹配对象使用re库匹配字符串,返回一个匹配对象,有如下属性和方法。matchobject.string的属性:要匹配的文本;.re:用于匹配的模式对象;.pos:正则表达式搜索文本的起始位置;.endpos:正则表达式搜索文本的结束位置。测试代码如下:importremy_str='1Charlieisnot猹1good1good1'regex=re.compile(pattern=r'g\w+d')ret=regex.search(my_str)print(ret)print(ret.string)print(ret.re)print(ret.pos)print(ret.endpos)结果输出:1查理不是猹1good1good1re.compile('g\\w+d')017匹配对象??方法.group(0):获取匹配的字符串;.start():匹配原字符串开头的字符串;.end():匹配字符串在原字符串的结束位置;.span():return(.start(),.end())由于内容比较简单,具体代码就不展示了。本篇博客总结本篇博客学习了Python中re库的知识点,重点介绍了re库中的函数,对正则表达式没有过多的讲解。希望对您有所帮助。