前言
re.search扫描整个字符串并返回第一个成功的匹配。re.findall返回字符串中所有不重叠匹配项的列表,如果没有匹配到返回空list不会报错。
search匹配对象有3个方法:group() groups() groupdict() ,这3个方法使用上会有一些差异。
如果只需匹配一个,匹配到就结束就用search,匹配全部就用findall
re.search(pattern,string,flags = 0 )
search扫描整个字符串并返回第一个成功的匹配,如果没匹配到返回None
函数参数说明:
- pattern 匹配的正则表达式
- string 要匹配的字符串。
- flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
import re
#基础写法一
kk=re.compile(‘\d+‘)
result=kk.search(‘123abc456‘)
print(result) #<re.Match object; span=(0, 3), match=‘123‘>
#基础写法二 注意此处search()的用法,可传两个参数
kk=re.compile(‘\d+‘)
result=re.search(kk,‘123abc456‘)
print(result) #<re.Match object; span=(0, 3), match=‘123‘>
#基础写法三 也可以直接在search传2个参数
result=re.search(‘\d+‘,‘123abc456‘)
print(result) #<re.Match object; span=(0, 3), match=‘123‘>
print(result.group()) #123
group()的使用
group(0) 是获取取得的字符串整体,group(1)是取出括号里面我们要匹配的内容
group(0)和group()效果相同,均为获取取得的字符串整体
group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。如果没匹配到返回的是None,调用group(1)方法会抛异常
示例1
import re
# 取出url地址
a = ‘百度地址:www.baidu.com,欢迎使用!!!‘
res = re.search(‘百度地址:(.*?),欢迎‘, a)
print(res) # 返回match对象 <re.Match object; span=(0, 21), match=‘百度地址:www.baidu.com,欢迎‘>
print(res.group(1)) # www.baidu.com
如果匹配到返回一个Match object对象,用group(1)取出匹配的值。
如果没匹配到返回的是None,调用group(1)方法会抛异常
import re
# 取出url地址
a = ‘百度地址:www.baidu.com,欢迎使用!!!‘
res = re.search(‘百度地址11111111:(.*?),欢迎‘, a)
print(res) # 返回match对象 <re.Match object; span=(0, 21), match=‘百度地址:www.baidu.com,欢迎‘>
print(res.group(1)) # www.baidu.com
如果整个字符串中,有多个值需要匹配,想同时取出,请看以下例子
import re # 取出url地址 a = ‘百度地址:www.baidu.com,微博地址:www.weibo.com,欢迎使用!!!‘ res = re.search(‘百度地址:(.*?),微博地址:(.*?),欢迎‘, a) print(res) # <re.Match object; span=(0, 40), match=‘百度地址:www.baidu.com,微博地址:www.weibo.com,欢迎‘> print(res.group()) # 百度地址:www.baidu.com,微博地址:www.weibo.com,欢迎 print(res.group(0)) # 百度地址:www.baidu.com,微博地址:www.weibo.com,欢迎 print(res.group(1)) # www.baidu.com print(res.group(2)) # www.weibo.com print(res.group(0,1,2)) # (‘百度地址:www.baidu.com,微博地址:www.weibo.com,欢迎使用!!!‘,‘www.baidu.com‘, ‘www.weibo.com‘)
以上例子可以看出:
- group() 跟group(0)一样是获取匹配的整个字符串
- group(1) 取出匹配的第一个值
- group(2) 取出匹配的第二个值
- group,0,1, 2) 同时取出上面对应的2个值,返回元祖