四时宝库

程序员的知识宝库

Python正则表达式(二十七)(python的正则表达)

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

注:很多开发人员觉得正则表达式比较难以理解,主要原因是缺少使用或不愿意在这上面花时间。

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

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

匹配单个字符的基本模式

编译标志

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

1.match函数

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

下面是函数的语法 -

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

这里是参数的描述 -

  • pattern - 这是要匹配的正则表达式。
  • string - 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
  • flags - 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。

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

示例

#!/usr/bin/python3
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', 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() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
Shell

2.search函数

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

下面是这个函数的语法 -

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

这里是参数的描述 -

  • pattern - 这是要匹配的正则表达式。
  • string - 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
  • flags - 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。

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

示例

#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if 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() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
Python

3.匹配与搜索

Python提供基于正则表达式的两种不同的原始操作:match检查仅匹配字符串的开头,而search检查字符串中任何位置的匹配(这是Perl默认情况下的匹配)。

示例

#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
 print ("match --> matchObj.group() : ", matchObj.group())
else:
 print ("No match!!")
searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
 print ("search --> searchObj.group() : ", searchObj.group())
else:
 print ("Nothing found!!")
Python

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

No match!!
search --> matchObj.group() : dogs
Shell

4.搜索和替换

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

模块

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

此方法使用repl替换所有出现在RE模式的字符串,替换所有出现,除非提供max。此方法返回修改的字符串。

示例

#!/usr/bin/python3
import re
phone = "2018-959-559 # This is Phone Number"
# Delete Python-style comments
num = re.sub(r'#.*
, "", phone) print ("Phone Num : ", num) # Remove anything other than digits num = re.sub(r'\D', "", phone) print ("Phone Num : ", num) Python

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

Phone Num : 2018-959-559
Phone Num : 2018959559
Shell

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

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

6.正则表达模式

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

7.正则表达式示例

字符常量

字符类

特殊字符类

重复匹配

非贪婪重复

这匹配最小的重复次数 -

用圆括号分组

反向引用

这与以前匹配的组再次匹配 -

备择方案

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

锚点

这需要指定匹配位置。

带括号的特殊语法

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接