简单讲两句:
re.match() 从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None
re.search()浏览全部字符串,匹配第一符合规则的字符串,浏览整个字符串去匹配第一个,未匹配成功返回None
即他们的区别在于开始匹配的位置不同。
# coding:utf-8
'''
Note:
re库笔记
Author:Qred
Date:2019/7/23
'''
import re
line = 'Cats are smarter than dogs.'
# match()
searchObj = re.match('[ar]t+', line)
# 使用match方法,没有匹配结果
# search()
# searchObj = re.search('[ar]t+', line)
# 使用search方法,返回第一个匹配结果
if searchObj != None:
print type(searchObj)
print searchObj.group()
还有一个问题就是,如果字符串开头就与关键字不匹配,那么就无法使用.match()方法,如果一个字符串中有多个符合匹配规则的配置项,想获得第二个匹配结果,那么就无法是使用.search()方法。
为了更好的使用他们的匹配功能,或者玩点更高级点的用法,可以尝试的使用compile()方法。通过调用compile()实例的.match(),.search()方法,更好的时间关键字的检索。
看实例:
# 接上面的代码
# compile()
pattern = re.compile('[ar]t+')
# searchObj = pattern.search(line,12)
# ----------------------------------------
# 注意这里是使用的的 pattern子方法
# ----------------------------------------
searchObj = pattern.match(line, 12)
# 指定开始位置,进行匹配
if searchObj != None:
# 如果匹配结果不为空
print type(searchObj)
# 匹配结果类型
print searchObj.group(0)
#第一个匹配结果(使用.match() .search() 只会返回一个结果,所以这里的0可以省略)
print searchObj.start()
# 匹配结果的起始位置
print searchObj.end()
# 匹配结果的结束位置+1
print searchObj.span()
# 匹配结果的位置
使用.search(line,12)和.match(line, 12)输出的结果相同,因为我们在代码中指定了他们的相同的起始位置。