1.使用search()方法进行匹配
search()方法用于整个字符串中搜索第一个匹配的值。如果匹配成功,则返回match对象,否则返回None。search()方法的语法格式如下:
re.search(pattern,string,[flags])
参数说明:
pattern:表示模式字符串,由要匹配的正则表达式转换而来
string:表示要匹配的字符串
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分大小写。常用表志,请参考上一节。
例如:搜索第一个以“mr_”开头的字符串,不区分字母大小写,代码如下:
inport re pattern=r'mr_W+' string='MR_SHOP mr_shop' match=re.search(pattern,string,re.I) print(match) string='项目名称MR_SHOP mr_shop' match=re.search(pattern,string,re.I) print(match)
执行结果:
<_sre.SRE_Match object; span=(0,7),match='MR_SHOP'> <_sre.SRE_Match object; span=(4,11),match='MR_SHOP'>
从上面的运行结果可以看出,search()方法不仅仅是在字符串的起始位置搜索,在其他位置有符合的匹配也可以进行搜索。
2.使用findall()方法进行匹配
findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回包含匹配结构的列表,否则返回空列表。findall()方法的语法如下:
re.findall(pattern,string ,[flags]) 参数说明: pattern:表示模式字符串,由要匹配的正则表达式转换而来。 string:表示要匹配的字符串 flags:可选参数,表示标志位,用于控制匹配方式,如是否区分大小写字母,常用的标志请参考上一节。
例如:搜索已“mr_”开头的字符串,代码如下:
inport re pattern=r'mr_W+' string='MR_SHOP mr_shop' match=re.findall(pattern,string,re.I) print(match) string='项目名称MR_SHOP mr_shop' match=re.findall(pattern,string,re.I) print(match)
执行结果如下:
['MR_SHOP','mr_shop'] [mr_shop]
如果在指定的模式字符串中,包含分组,则返回与分组匹配的文本列表,例如:
import re pattern=r'[1-9]{1,3}(.[0-9]{1,3}){3}' str1='127.0.0.1 192.168.1.66' match=re.findall(pattern,str1) print(match)
上面代码执行的结果如下:
['.1','.66']
从上面的结果中可以看出,并没有返回得到匹配的IP地址,这是因为在模式字符串中出现了分组,所以得到的结果是根据分组进行匹配的结果,即“(.[0-9]{1,3})”匹配的结果。如果想要获取整个模式字符串的匹配,可以将整个模式字符串使用一对小括号进行分组,然后再获取结果时,只取返回值列表的每个元素的第一个元素。代码如下:
import re pattern=r'([1-9]{1,3}(.[0-9]{1,3}){3})' str1='127.0.0.1 192.168.1.66' match=re.findall(pattern,str1) for item in match: print(item[0])
执行结果如下:
127.0.0.1 192.168.1.66
花絮:
本期的Python 字符串正则表达式就分享到这里,下期我们将继续分享Python字符串正则表达式的相关知识,感兴趣的朋友可以关注我。
同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。