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:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.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迭代器。
标签:aa,finditer,python,dd,print,re,test,line,cc 来源: https://www.cnblogs.com/xzy186/p/14268224.html