Python合集之Python正则表达式(四)

    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字符串正则表达式的相关知识,感兴趣的朋友可以关注我。

同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。

posted @ 2021-03-09 23:11  @睦  阅读(95)  评论(0编辑  收藏  举报