3分钟内理解Python的re模块中match、search、findall、finditer的区别

来源:互联网 发布:go并发编程实战第二版 编辑:程序博客网 时间:2024/05/16 17:29

re就Python中用于正则表达式相关处理的类,这四个方法都是用于匹配字符串的,具体区别如下:

match

匹配string 开头,成功返回Match object, 失败返回None,只匹配一个。

string中进行搜索,成功返回Match object, 失败返回None, 只匹配一个。

findall

在string中查找所有 匹配成功的组, 即用括号括起来的部分。返回list对象,每个list item是由每个匹配的所有组组成的list。

finditer

在string中查找所有 匹配成功的字符串, 返回iterator,每个item是一个Match object。

不多说概念,直接看栗子!

#!/usr/bin/env python# -*- coding:utf-8 -*-from __future__ import print_functionimport recontent = '333STR1666STR299'regex = r'([A-Z]+(\d))'if __name__ == '__main__':    print(re.match(regex, content)) ##content的开头不符合正则,所以结果为None。    ##只会找一个匹配,match[0]是regex所代表的整个字符串,match[1]是第一个()中的内容,match[2]是第二对()中的内容。    match = re.search(regex, content)    print('\nre.search() return value: ' + str(type(match)))    print(match.group(0), match.group(1), match.group(2))      result1 = re.findall(regex, content)    print('\nre.findall() return value: ' + str(type(result1)))    for m in result1:        print(m[0], m[1])    result2 = re.finditer(regex, content)    print('\nre.finditer() return value: ' + str(type(result2)))    for m in result2:        print(m.group(0), m.group(1), m.group(2))  ##字符串

输出:

None re.search() return value: <TYPE ?_sre.SRE_Match?>STR1 STR1 1 re.findall() return value: <TYPE ?list?>STR1 1 STR2 2 re.finditer() return value: <TYPE ?callable-iterator?>STR1 STR1 1 STR2 STR2 2

试着把regex最外边的括号去掉,即regex = r'[A-Z]+(\d)',组的个数就会减少一个:

#!/usr/bin/env python# -*- coding:utf-8 -*-from __future__ import print_functionimport recontent = '333STR1666STR299'regex = r'[A-Z]+(\d)'if __name__ == '__main__':    print(re.match(regex, content)) ##content的开关不符合正则,所以结果为None。    ##只会找一个匹配,match[0]是regex所代表的整个字符串,match[1]是第一个()中的内容,match[2]是第二对()中的内容。    match = re.search(regex, content)    print('\nre.search() return value: ' + str(type(match)))    print(match.group(0), match.group(1))      result1 = re.findall(regex, content)    print('\nre.findall() return value: ' + str(type(result1)))    for m in result1:        print(m[0])    result2 = re.finditer(regex, content)    print('\nre.finditer() return value: ' + str(type(result2)))    for m in result2:        print(m.group(0), m.group(1))  ##字符串

输出:

None re.search() return value: <TYPE ?_sre.SRE_Match?>STR1 1 re.findall() return value: <TYPE ?list?>1 2 re.finditer() return value: <TYPE ?callable-iterator?>STR1 1 STR2 2
阅读全文
0 0