谈谈 re 模块中 finditer 函数 的区别,举例说明
时间: 2024-04-17 20:26:07 浏览: 107
python re的findall和finditer的区别详解
`re` 模块中的 `finditer()` 函数与 `findall()` 函数类似,都用于在字符串中搜索匹配的模式。它们的主要区别在于返回的结果类型和使用方式。
1. `finditer()` 函数:返回迭代器对象
- `finditer()` 函数在字符串中搜索匹配项,并返回一个迭代器对象。该迭代器对象用于逐个访问与模式匹配的每个子字符串。每次迭代都会返回一个匹配对象,可以通过该对象的方法获取匹配的起始和结束位置。
示例代码:
```python
import re
text = "The quick brown fox jumps over the lazy dog."
pattern = r"\b\w{4}\b" # 匹配具有4个字母的单词
matches = re.finditer(pattern, text)
for match in matches:
print(f"Found at position {match.start()} - {match.end()}: {match.group()}")
```
输出:
```
Found at position 4 - 9: quick
Found at position 10 - 15: brown
Found at position 16 - 21: jumps
Found at position 26 - 30: over
Found at position 35 - 39: lazy
```
在上述代码中,我们使用正则表达式模式 `\b\w{4}\b` 来匹配具有4个字母的单词。`finditer()` 函数返回一个迭代器对象,遍历该对象可以逐个获取匹配项的详细信息。
需要注意的是,`finditer()` 返回的是一个迭代器对象,而不是列表。这意味着它适用于处理大型文本,因为它不会一次性返回所有匹配项,而是按需生成每个匹配对象。
与此相比,`findall()` 函数返回的是一个包含所有匹配项的列表。如果需要一次性获取所有匹配项并进行处理,可以使用 `findall()` 函数。如果需要逐个处理匹配项或者处理大型文本,可以使用 `finditer()` 函数。
阅读全文