Python3 re模块match与search

2023年 7月 1日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

Python3 re模块match与search

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等,本篇文章重点讲解一下Python3 中 re.match与re.search。

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

函数语法:

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

函数参数说明:

参数 描述 pattern 匹配的正则表达式 string 要匹配的字符串 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 – 可选标志

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 描述 group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组 groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号

实例

#!/usr/bin/python    import re  print(re.match('www''www.runoob.com').span())  # 在起始位置匹配  print(re.match('com''www.runoob.com'))         # 不在起始位置匹配  

以上实例运行输出结果为:

(0, 3)  None  

实例

#!/usr/bin/python3  import re    line = "Cats are smarter than dogs"  # .* 表示任意匹配除换行符(n、r)之外的任何单个或多个字符  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!!")  

以上实例执行结果如下:

matchObj.group() :  Cats are smarter than dogs  matchObj.group(1) :  Cats  matchObj.group(2) :  smarter  

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:

re.search(pattern, string, flags=0)  

函数参数说明:

参数 描述 pattern 匹配的正则表达式 string 要匹配的字符串 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 – 可选标志

匹配成功re.search方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 描述 group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组 groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号

实例

#!/usr/bin/python3    import re    print(re.search('www''www.runoob.com').span())  # 在起始位置匹配  print(re.search('com''www.runoob.com').span())         # 不在起始位置匹配  

以上实例运行输出结果为:

(0, 3)  (11, 14)  

实例

#!/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!!")  

以上实例执行结果如下:

searchObj.group() :  Cats are smarter than dogs  searchObj.group(1) :  Cats  searchObj.group(2) :  smarter  

re.match与re.search的区别

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

实例

#!/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!!")    matchObj = re.search( r'dogs', line, re.M|re.I)  if matchObj:    print ("search --> matchObj.group() : ", matchObj.group())  else:    print ("No match!!")  

以上实例运行结果如下:

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

本文来源:www.lxlinux.net/8069.html,若引用不当,请联系修改。

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: