1. 程式人生 > 實用技巧 >python模組re中的findall和finditer區別

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迭代器。