正则表达式是一个特殊的字符序列,可以帮助您使用模式中保留的专门语法来匹配或查找其他字符串或字符串集。正则表达式在UNIX世界中被广泛使用。 注:很多开发人员觉得正则表达式比较难以理解,主要原因是缺少使用或不愿意在这上面花时间。 re模块在Python中提供对Perl类正则表达式的完全支持。如果在编译或使用正则表达式时发生错误,则re模块会引发异常re。error。 在这篇文章中,将介绍两个重要的功能,用来处理正则表达式。然而,首先是一件小事:有各种各样的字符,这些字符在正则表达式中使用时会有特殊的意义。为了在处理正则表达式时避免混淆,我们将使用:rexpression原始字符串。 匹配单个字符的基本模式 编号 表达式 描述 1hra,X,9, 普通字符完全匹配。 2hr。 匹配任何单个字符,除了换行符’‘ 3hrw 匹配单词字符:字母或数字或下划线〔azAZ09〕。 4hrW 匹配任何非字词。 5hrb 字词与非字词之间的界限 6hrs 匹配单个空格字符:空格,换行符,返回,制表符 7hrS 匹配任何非空格字符。 8hr,,r 制表符,换行符,退格符 9hrd 十进制数〔09〕 10hr 匹配字符串的开头 11hr 匹配字符串的末尾 12hr抑制字符的特殊性,也叫转义字符。编译标志 编译标志可以修改正则表达式的某些方面。标志在re模块中有两个名称:一个很长的名称,如IGNORECASE,和一个简短的单字母形式,如。 编号 标志 含义 1hrASCII,A 像w,b,s和d之间的几个转义只匹配ASCII字符与相应的属性。 2hrDOTALL,S 匹配任何字符,包括换行符 3hrIGNORECASE,I 不区分大小写匹配 4hrLOCALE,L 做一个区域感知的匹配 5hrMULTILINE,M 多行匹配,影响和 6hrVERBOSE,X(for‘extended’) 启用详细的RE,可以更干净,更容易理解 1。match函数 此函数尝试将RE模式与可选标志的字符串进行匹配。 下面是函数的语法:re。match(pattern,string,flags0)12复制代码类型:〔python〕 这里是参数的描述: pattern:这是要匹配的正则表达式。 string:这是字符串,它将被搜索用于匹配字符串开头的模式。 flags:可以使用按位OR()指定不同的标志。这些是修饰符,如下表所列。 re。match函数在成功时返回匹配对象,失败时返回None。使用match(num)或groups()函数匹配对象来获取匹配的表达式。 编号 匹配对象 描述 1hrgroup(num0) 此方法返回整个匹配(或特定子组num) 2hrgroups() 此方法返回一个元组中的所有匹配子组(如果没有,则返回为None) 示例!usrbinpython3importrelineCatsaresmarterthandogsmatchObjre。match(r(。)are(。?)。,line,re。Mre。I)ifmatchObj:print(matchObj。group():,matchObj。group())print(matchObj。group(1):,matchObj。group(1))print(matchObj。group(2):,matchObj。group(2))else:print(Nomatch!!)1234567891011121314复制代码类型:〔python〕 当执行上述代码时,会产生以下结果:matchObj。group():CatsaresmarterthandogsmatchObj。group(1):CatsmatchObj。group(2):smarter123复制代码类型:〔python〕 2。search函数 此函数尝试将RE模式与可选标志的字符串进行匹配。 下面是这个函数的语法:re。match(pattern,string,flags0)123复制代码类型:〔python〕 这里是参数的描述: pattern:这是要匹配的正则表达式。 string:这是字符串,它将被搜索用于匹配字符串开头的模式。 flags:可以使用按位OR()指定不同的标志。这些是修饰符,如下表所列。 re。search函数在成功时返回匹配对象,否则返回None。使用match对象的group(num)或groups()函数来获取匹配的表达式。 编号 匹配对象 描述 1hrgroup(num0) 此方法返回整个匹配(或特定子组num) 2hrgroups() 此方法返回一个元组中的所有匹配子组(如果没有,则返回为None) 示例!usrbinpython3importrelineCatsaresmarterthandogs;searchObjre。search(r(。)are(。?)。,line,re。Mre。I)ifsearchObj:print(searchObj。group():,searchObj。group())print(searchObj。group(1):,searchObj。group(1))print(searchObj。group(2):,searchObj。group(2))else:print(Nothingfound!!)1234567891011121314复制代码类型:〔python〕 当执行上述代码时,会产生以下结果:matchObj。group():CatsaresmarterthandogsmatchObj。group(1):CatsmatchObj。group(2):smarter1234复制代码类型:〔python〕 3。匹配与搜索 Python提供基于正则表达式的两种不同的原始操作:match检查仅匹配字符串的开头,而search检查字符串中任何位置的匹配(这是Perl默认情况下的匹配)。 示例!usrbinpython3importrelineCatsaresmarterthandogs;matchObjre。match(rdogs,line,re。Mre。I)ifmatchObj:print(matchmatchObj。group():,matchObj。group())else:print(Nomatch!!)searchObjre。search(rdogs,line,re。Mre。I)ifsearchObj:print(searchsearchObj。group():,searchObj。group())else:print(Nothingfound!!)123456789101112131415161718复制代码类型:〔python〕 当执行上述代码时,会产生以下结果:Nomatch!!searchmatchObj。group():dogs12复制代码类型:〔python〕 4。搜索和替换 使用正则表达式re模块中的最重要的之一是sub。 模块re。sub(pattern,repl,string,max0)1复制代码类型:〔python〕 此方法使用repl替换所有出现在RE模式的字符串,替换所有出现,除非提供max。此方法返回修改的字符串。 示例!usrbinpython3importrephone2018959559ThisisPhoneNumberDeletePythonstylecommentsnumre。sub(r。39;,,phone)print(PhoneNum:,num)Removeanythingotherthandigitsnumre。sub(rD,,phone)print(PhoneNum:,num)123456789101112复制代码类型:〔python〕 当执行上述代码时,会产生以下结果:PhoneNum:2018959559PhoneNum:201895955912复制代码类型:〔python〕 5。正则表达式修饰符:选项标志 正则表达式文字可能包含一个可选修饰符,用于控制匹配的各个方面。修饰符被指定为可选标志。可以使用异或()提供多个修饰符,如前所示,可以由以下之一表示: 编号 修辞符 描述 1hrre。I 执行不区分大小写的匹配。 2hrre。L根据当前语言环境解释单词。 这种解释影响字母组(w和W)以及字边界行为(b和B)。 3hrre。M使匹配一行的结尾(而不仅仅是字符串的结尾), 并使匹配任何行的开始(而不仅仅是字符串的开头)。 4hrre。S 使一个句点(。)匹配任何字符,包括换行符。 5hrre。U根据Unicode字符集解释字母。 此标志影响w,W,b,B的行为。 6hrre。X允许cuter正则表达式语法。它忽略空格(除了一个集合〔〕内部, 或者用反斜杠转义),并将未转义的作为注释标记。 6。正则表达模式 除了控制字符(?。()〔〕{}),所有字符都与其自身匹配。可以通过使用反斜杠将其转换为控制字符。 7。正则表达式示例 字符常量 编号 示例 说明 1hrpython 匹配python。 字符类 编号 示例 说明 1hr〔Pp〕ython 匹配Python或python 2hrrub〔ye〕 匹配ruby或rube 3hr〔aeiou〕 匹配任何一个小写元音 4hr〔09〕 匹配任何数字;如〔0123456789〕 5hr〔az〕 匹配任何小写ASCII字母 6hr〔AZ〕 匹配任何大写的ASCII字母 7hr〔azAZ09〕 匹配上述任何一个 8hr〔aeiou〕 匹配除小写元音之外的任何东西 9hr〔09〕 匹配数字以外的任何东西 特殊字符类 编号 示例 说明 1hr。 匹配除换行符以外的任何字符 2hrd 匹配数字:〔09〕 3hrD 匹配非数字:〔09〕 4hrs 匹配空格字符:〔rf〕 5hrS 匹配非空格:〔rf〕 6hrw 匹配单字字符:〔AZaz09〕 7hrW 匹配非单字字符:〔AZaz09〕 重复匹配 编号 示例 说明 1hrruby? 匹配rub或ruby:y是可选的 2hrruby 匹配rub加上0个以上的y 3hrruby 匹配rub加上1个或更多的y 4hrd{3} 完全匹配3位数 5hrd{3,} 匹配3位或更多位数字 6hrd{3,5} 匹配3,4或5位数 非贪婪重复 这匹配最小的重复次数: 编号 示例 说明 1hr。 贪婪重复:匹配perl 2hr。? 非贪婪重复:在perl中匹配 用圆括号分组 编号 示例 说明 1hrDd 没有分组:重复d 2hr(Dd) 分组:重复Dd对 3hr(〔Pp〕ython(,)?) 匹配Python,Python,python,python等 反向引用 这与以前匹配的组再次匹配: 编号 示例 说明 1hr(〔Pp〕)ython1ails 匹配python和pails或Python和Pails 2hr(〔〕)〔1〕1 单引号或双引号字符串。1匹配第一个分组匹配。2匹配任何第二个分组匹配等 备择方案 pythonperl:匹配python或perl rub(yle):匹配ruby或ruble Python(!?):Python后跟一个或多个!还是一个? 锚点 这需要指定匹配位置。 编号 示例 说明 1hrPython 在字符串或内部行的开头匹配Python 2hrPython 在字符串或内部行的结尾匹配Python 3hrAPython 在字符串的开头匹配Python 4hrPythonZ 在字符串的末尾匹配Python 5hrbPythonb 在字词的边界匹配Python 6hrbrubB B是非字词边界:在rube和ruby中匹配rub,而不是单独匹配 7hrPython(?!) 匹配Python,如果跟着感叹号。 8hrPython(?!!) 匹配Python,如果没有感叹号后面。 带括号的特殊语法 编号 示例 说明 1hrR(?comment) 匹配R。其余的都是注释 2hrR(?i)uby 匹配uby时不区分大小写 3hrR(?i:uby) 同上 4hrrub(?:y le)) 仅组合而不创建1反向引用 开课吧广场人才学习交流平台开课吧