详解Python re.finditer函数:返回一个迭代器,迭代查找字符串中的所有匹配项

  • Post category:Python

Python 中的 re 模块是正则表达式操作库,提供了正则表达式的基本操作函数,例如 findallsearchsub 等等,它们允许我们在字符串中进行模式匹配、替换等操作。其中,finditer 函数是 re 模块中的一个函数,用于在字符串中匹配符合给定正则表达式的所有子串,并返回一个迭代器。在本篇攻略中,我们将详细讲解 finditer 函数的作用、使用方法以及两个实例说明。

作用

finditer 函数用于在字符串中匹配符合给定正则表达式的所有子串,并返回一个迭代器。这个迭代器包含了每一个匹配成果,并且每一个成果都是一个 match 对象。

使用方法

finditer 函数的语法如下:

re.finditer(pattern, string, flags=0)
  • pattern:正则表达式模式
  • string:要匹配的字符串
  • flags:可选参数,用于控制正则表达式的匹配方式,如是否区分大小写等

下面我们通过两个实例来演示 finditer 函数的使用。

实例说明

实例一

假设我们需要找到一个字符串中所有连续的数字子串,并将其转化为整数。我们可以使用 finditer 函数实现。

import re

s = 'abc12de45fg789hij34'

# 使用 re.compile 函数将正则表达式编译,加快匹配速度
pattern = re.compile(r'\d+')  

# 使用 finditer 函数查找匹配的结果
matches = pattern.finditer(s)  

# 遍历匹配结果,取出每个匹配成功的子串,将其转化为整数
for match in matches:
    num = int(match.group())
    print(num)

输出结果:

12
45
789
34

实例二

假设我们需要找到一个 HTML 文本中所有链接的 URL,并打印出来。我们同样可以使用 finditer 函数实现。

import re

html = '''
<html>
<head><title>Sample HTML Page</title></head>
<body>
    <h1>This is a sample HTML page</h1>
    <p>Welcome to the <a href="http://www.google.com">Google</a> homepage</p>
    <p>Here are some other useful links:</p>
    <ul>
        <li><a href="http://www.python.org">Python Homepage</a></li>
        <li><a href="http://www.github.com">Github</a></li>
    </ul>
</body>
</html>
'''

# 使用正则表达式找到所有链接的 URL
pattern = re.compile(r'<a.*?href="(.*?)".*?>')
matches = pattern.finditer(html) 

# 遍历匹配结果,取出链接的 URL,并打印出来
for match in matches:
    url = match.group(1)
    print(url)

输出结果:

http://www.google.com
http://www.python.org
http://www.github.com

通过上面的实例,我们能够初步了解到 finditer 函数的使用方法,以及该函数在正则表达式匹配中的重要作用。