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

  • 相关阅读:
    paip.python错误解决21
    【Linux入门学习之】vi/vim编辑器必知必会
    深入理解C/C++数组和指针
    《当幸福来敲门》的经典对话
    matlab与excel xlsread、xlswrite实用方法
    vim复制粘贴的命令
    深入理解C/C++数组和指针
    vim复制粘贴的命令
    matlab与excel xlsread、xlswrite实用方法
    【Linux入门学习之】vi/vim编辑器必知必会
  • 原文地址:https://www.cnblogs.com/xzy186/p/14268224.html
Copyright © 2020-2023  润新知