首页 > 国内新闻

Python正则表达式(二十七)

文章作者:来源:www.50x15.com时间:2019-09-16



正则表达式是一种特殊的字符序列,可帮助您使用模式中保留的专用语法来匹配或查找其他字符串或字符串集。正则表达式在UNIX世界中被广泛使用。

注意:许多开发人员发现正则表达式难以理解。主要原因是缺乏使用或不愿意花时间。

re模块完全支持Python中的Perl类正则表达式。如果在编译或使用正则表达式时发生错误,则re模块会抛出异常re.error。

在本文中,介绍了两个重要的功能来处理正则表达式。然而,首先是一件小事:在正则表达式中使用时,有各种各样的字符具有特殊含义。为了避免在处理正则表达式时出现混淆,我们将使用:r'expression'原始字符串。

匹配单个字符的基本模式

编译标志

编译标志可以修改正则表达式的某些方面。该标志在re模块中有两个名称:一个非常长的名称,例如IGNORECASE,以及一个短的单字母形式,例如I.

1.匹配功能

此函数尝试将RE模式与可选标志字符串进行匹配。

这是函数的语法 -

Re.match(pattern,string,flags=0)Python

以下是参数的说明 -

模式 - 这是要匹配的正则表达式。 String - 这是一个字符串,将搜索与字符串开头匹配的模式。 | flags - 您可以使用按位OR(|)指定不同的标志。这些是下表中列出的修饰符。

re.match函数在成功时返回匹配对象,并在失败时返回None。使用match(num)或groups()函数匹配对象以获取匹配的表达式。

示例

#!/usr/bin/python3import reline='猫比狗聪明'matchObj=re.match(r'(。*)是(。*?)。*',line,re.M | re.I)if matchObj: print('matchObj.group():',matchObj.group())print('matchObj.group(1):',matchObj.group(1))print('matchObj.group(2):', matchObj.group(2))else: print('No match !')Python

执行上述代码时,将产生以下结果 -

matchObj.group():猫比dogmatchObj.group聪明(1): CatsmatchObj.group(2): smarterShell

2.搜索功能

此函数尝试将RE模式与可选标志字符串进行匹配。

以下是此函数的语法 -

Re.match(pattern,string,flags=0)Python

以下是参数的说明 -

模式 - 这是要匹配的正则表达式。 String - 这是一个字符串,将搜索与字符串开头匹配的模式。 | flags - 您可以使用按位OR(|)指定不同的标志。这些是下表中列出的修饰符。

re.search函数在成功时返回匹配对象,否则返回None。使用匹配对象的group(num)或groups()函数来获取匹配的表达式。

示例

#!/usr/bin/python3import reline='猫比狗聪明'; searchObj=re.search(r'(。*)是(。*?)。*',line,re.M | re.I)如果searchObj: print('searchObj.group():',searchObj.group())print('searchObj.group(1):',searchObj.group(1))print('searchObj.group(2):' ,searchObj.group(2))else: print('Nothing found !')Python

执行上述代码时,将产生以下结果 -

matchObj.group():猫比dogmatchObj.group聪明(1): CatsmatchObj.group(2): smarterPython

3.匹配和搜索

Python基于正则表达式提供两种不同的基本操作:匹配检查仅匹配字符串的开头,搜索匹配字符串中任何位置的匹配(这是Perl的默认匹配)。

示例

#/usr/bin/Python 3 import re line='猫比狗更聪明'; matchObj=re。 match(r'dogs',line,re.M | re.I)if matchObj: print('match - > matchObj.group()':',matchObj.group()': print('no match! ')如果matchObj=re。搜索('r'dogs',行.M | I)如果matchObj: print('match',匹配Obj.Rint('search - > searchObj.group():',searchObj .group())else: print('Nothing found!')Python

执行上述代码时,会生成以下结果 -

没有比赛!搜索 - > matchObj。 group(): dogsShell

4.搜索和替换

使用正则表达式re模块最重要的事情之一是sub。

模块

Re.sub(pattern,repl,string,max=0)Python

除非提供Max,否则此方法将使用repl替换RE模式中出现的所有字符串。此方法返回修改后的字符串。

示例

#!/usr/bin/python3import rephone='2018-959-559#这是电话号码'#删除Python样式的commentsnum=re.sub(r'#。* $','',手机)print('Phone Num:',num)#删除digitsnum=re.sub(r'\\ D','',phone)以外的任何内容print('Phone Num:',num)Python

执行上述代码时,将产生以下结果 -

电话号码: 2018-959-559电话号码: 外壳

5.正则表达式修饰符:选项标记

正则表达式文字可能包含一个可选的修饰符来控制匹配的各个方面。修饰符被指定为可选标志。您可以使用XOR(|)提供多个修饰符,如前所示,可以用以下之一表示 -

6.正则表达式

除了控制字符(+?* ^ $()[] {} | \\)之外,所有字符都与它们自己匹配。可以使用反斜杠将其转换为控制字符。

7.正则表达式示例

字符常量

字符类

特殊字符类

重复匹配

非贪婪重复

这匹配最小重复次数 -

用圆括号分组

反向引用

这再次匹配先前匹配的组 -

备择方案

Python | perl - 匹配“python”或“perl”rub(y | le) - 匹配“ruby”或“ruble”Python(!+ | \\?) - “Python”后跟一个或多个!还是一个?

锚点

这需要指定匹配的位置。

带括号的特殊语法

http://www.sugys.com/bds2T/uQ7