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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM