开发者学堂课程【Python入门 2020年版:正则查找相关的方法】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10442
正则查找相关的方法
内容介绍:
一、 match 和 search 方法的使用
二、 finditer 方法
三、 findall 方法
四、 fullmatch 方法
在 Python 中的查找匹配方法,常见的有下面五种,他们的用法大致相同,但是匹配出的结果却不同。
一、match 和s earch 方法的使用
match 方法(只匹配字符串开头):查找字符串,返回的结果是一个 re.Match 对象。
search 方法(扫描整个字符串,找到第一个匹配):查找字符串,返回的结果是一个 re.Match 对象。但是与 match 方法是有区别的。
m1 = re.match(r " hello', 'hello wrold good morining ' )
print(m1)
m2 = re.search(r' hello', 'hello wrold good morining ' )
print(m2)
输出结果:
,5),match=' hello '>
,5), match= 'hello '>
其中的 span,表示的是匹配到的开始,这里是从0开始到5结束但不包括5。假如r后面是‘hel’,则 span = (0,3)。
两个输出结果都是相同的。我们给他改一下后。
m2 = re.search(r' hello', 'hello wrold good morining ' )
print(m2)
输出的结果是:
,16), match='good ' >
m3 = re.match(r'good ' , 'hello wrold good morining ' )
print(m3)
而这个时候输出的结果就是 None。
两者共同点:
1. 只对字符串查询一次
2. 返回值类型都是re.Match类型的对象
两者不同点:
match 是从头开始匹配,一旦匹配失败,就返回 None。只要查找的内容不在开头就会返回 None。
search 是在整个字符串里匹配,只要字符串中有查找的字符串就会匹配成功。
二、finditer 方法
扫描整个字符串,找到所有的匹配,并返回一个可迭代对象返回的结果是个可迭代对象。
当我们用 search 方法的时候,无法对所有需要查找的字符串进行匹配,而是只能查找第一个。
print(re.search(r'x ' , ‘klxdasxadfxidfasxdfidzxds'))
输出的结果为:
我们看到只能匹配到第一个 x。
m3 = re.finditer(r'x', 'klxdasxadfxidfasxdfidzxds ' )
print(isinstance(m3
,Iterable))
for t in m3:
print(t)
输出的结果是:
True
,3),match='x '>
,7), match= 'x '>
,11),match='x '>
,17),match='x '>
,23),match='x ' >
输出为 True 表示 m3是个可迭代对象。
三、findall 方法
扫描整个字符串,找到所有的匹配。
m4 = re.findall(r'x','klxdasxadfxidfasxdfidzxds')
print(m4)
输出的结果为:
[‘x’, ‘x’, ‘x’, ‘x’, ‘x’]
将所有匹配到的字符串匹配到列表里。
m4 = re.findall(r'x\d+','klx45dasx78adfxidfasx6dfidzxds')
print(m4)
输出的结果为:
[‘x45’, ‘x78’, ‘x6’]
这里用到正则表达式,查找 x 后面有数字的字符串进行匹配,x 后面没有数字不会进行匹配。
四、fullmatch 方法
扫描整个字符串。
m5 = re.fullmatch(r" hello world ', 'hello world ')
print(m5)
输出的结果为:
,11), match='hello world ' >
当查找的字符串完全相同会完成匹配。不同的时候会返回值 None。
m6 = re.fullmatch(r"h.*d,
‘hoirjegoriejgd’)
print(m6)
输出的结果为:
, 5),match= '‘hoirjegoriejgd '>
“h”和“d”之间出现一次或多次的任意字符的情况也可以完全匹配,无论字符串“h”和“d”之间的字符串是怎么样的都可以完成匹配。