python模块re中的findall和finditer区别

findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

finditer

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

输入代码:

 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 
 4 import re
 5 
 6 
 7 test_line = r'ab123abcABC456def789ggh'                                  # 定义一个字符串变量test_line
 8 aa = re.compile('d')                                                   # 生成一个正则表达式对象aa,d是匹配额所有数字
 9 bb = aa.match(test_line, 3, 9)                                          # 使用aa中定义的正则表达式匹配字符串test_line
10 print('aa is', aa)                                                      # 打印变量aa的值
11 print('bb is', bb)                                                      # 打印变量bb的值
12 print(aa.findall(test_line, 2, 9))                                      # 使用aa对象的正则表达式,在字符串test_line中匹配值
13 cc = re.findall('D', test_line)                                        # 使用自定义的正则表达式,在字符串test_line中匹配值,D是匹配所有非数字
14 print(type(cc))                                                         # 打印变量cc的类型
15 print('cc is', cc)                                                      # 打印变量cc的值
16 for i in cc:                                                            # 遍历变量cc中的值赋值给变量i,然后打印变量i的值
17     print(i)
18 
19 dd = re.finditer('D', test_line)                                       # 定义变量dd
20 print(type(dd))                                                         # 打印变量dd的类型
21 print('dd is', dd)                                                      # 打印变量dd的值
22 for i in dd:                                                            # 遍历变量dd中的值赋值给变量i,然后打印变量i的值
23     print(i, i.group())

执行结果:

C:UsersAdministratorAppDataLocalProgramsPythonPython35-32python.exe C:/Users/Administrator/Desktop/mypython/test.py
aa is re.compile('\d')
bb is <_sre.SRE_Match object; span=(3, 4), match='2'>
['1', '2', '3']
<class 'list'>
cc is ['a', 'b', 'a', 'b', 'c', 'A', 'B', 'C', 'd', 'e', 'f', 'g', 'g', 'h']
a
b
a
b
c
A
B
C
d
e
f
g
g
h
<class 'callable_iterator'>
dd is <callable_iterator object at 0x01A16BF0>
<_sre.SRE_Match object; span=(0, 1), match='a'> a
<_sre.SRE_Match object; span=(1, 2), match='b'> b
<_sre.SRE_Match object; span=(5, 6), match='a'> a
<_sre.SRE_Match object; span=(6, 7), match='b'> b
<_sre.SRE_Match object; span=(7, 8), match='c'> c
<_sre.SRE_Match object; span=(8, 9), match='A'> A
<_sre.SRE_Match object; span=(9, 10), match='B'> B
<_sre.SRE_Match object; span=(10, 11), match='C'> C
<_sre.SRE_Match object; span=(14, 15), match='d'> d
<_sre.SRE_Match object; span=(15, 16), match='e'> e
<_sre.SRE_Match object; span=(16, 17), match='f'> f
<_sre.SRE_Match object; span=(20, 21), match='g'> g
<_sre.SRE_Match object; span=(21, 22), match='g'> g
<_sre.SRE_Match object; span=(22, 23), match='h'> h

进程已结束,退出代码0

执行结果中可以看到findall返回的是一个list,而finditer返回的是一个callable_iterator迭代器。

原文地址:https://www.cnblogs.com/xzy186/p/14268224.html