Метод Python re.finditer()
re.finditer()является Pythonreфункция модуля дляитеративного поиска всех совпадений.
Он возвращает итератор, каждый элемент которого является объектом match, что позволяет обрабатывать результаты сопоставления по одному.
Определение термина: find iterЭто означает «итератор поиска».
Базовый синтаксис и параметры
Формат синтаксиса
re.finditer(pattern, string, flags=0)
Описание параметра
- pattern: Шаблон регулярного выражения
- string: Строка для поиска
- flags: Необязательные флаги регулярного выражения
Описание функций
- Возвращаемое значение: Возвращает итератор, каждый элемент которого является объектом match.
- Особенности: Подходит для обработки большого количества результатов сопоставления, экономя память.
Примеры
Пример 1: Базовое использование
Пример
import re
text = "3 яблока, 5 апельсинов, 8 бананов"
# Итерация для поиска всех чисел
for match in re.finditer(r'\d+', text):
print(f"Найдено: {match.group()} Позиция: {match.start()}-{match.end()}")
text = "3 яблока, 5 апельсинов, 8 бананов"
# Итерация для поиска всех чисел
for match in re.finditer(r'\d+', text):
print(f"Найдено: {match.group()} Позиция: {match.start()}-{match.end()}")
Ожидаемый вывод:
找到: 3 位置: 0-1 找到: 5 位置: 4-5 找到: 8 位置: 8-9
Пример 2: Обработка списка email
Пример
import re
text = "Свяжитесь с [email protected] или [email protected] для получения помощи"
# Найти и обработать каждый адрес электронной почты
for match in re.finditer(r'(\w+)@(\w+\.\w+)', text):
print(f"Полное совпадение: {match.group()}")
print(f" Имя пользователя: {match.group(1)}")
print(f" Домен: {match.group(2)}")
print(f" Позиция: {match.start()}-{match.end()}")
text = "Свяжитесь с [email protected] или [email protected] для получения помощи"
# Найти и обработать каждый адрес электронной почты
for match in re.finditer(r'(\w+)@(\w+\.\w+)', text):
print(f"Полное совпадение: {match.group()}")
print(f" Имя пользователя: {match.group(1)}")
print(f" Домен: {match.group(2)}")
print(f" Позиция: {match.start()}-{match.end()}")
Ожидаемый вывод:
完整: [email protected] 用户名: test 域名: example.com 位置: 2-16 完整: [email protected] 用户名: admin 域名: test.org 位置: 17-30
Пример 3: Сравнение с re.findall()
Пример
import re
text = "a1b2c3d4"
# findall возвращает список строк
print("findall:", re.findall(r'\d', text))
# finditer возвращает итератор
print("finditer:", [m.group() for m in re.finditer(r'\d', text)])
text = "a1b2c3d4"
# findall возвращает список строк
print("findall:", re.findall(r'\d', text))
# finditer возвращает итератор
print("finditer:", [m.group() for m in re.finditer(r'\d', text)])
Ожидаемый вывод:
findall: ['1', '2', '3', '4'] finditer: ['1', '2', '3', '4']
Другие расширения
Модуль re в Python