Это возможно, если вы знаете, что совпадение с регулярным выражением никогда не охватит новую строку.
Тогда вы можете просто сделать
for line in file:
result = re.finditer(regex, line)
# do something...
Если совпадения могут занимать несколько строк, вам необходимо прочитать весь файл в память. В противном случае, как вы узнаете, выполнено ли уже ваше сопоставление, или если какое-то содержимое, находящееся в будущем, сделает сопоставление невозможным, или совпадение будет неудачным, поскольку файл не был прочитан достаточно далеко?
Edit:
Теоретически это возможно сделать. Механизм регулярных выражений должен был бы проверить, достигает ли в какой-либо момент в ходе попытки сопоставления конец текущей считываемой части потока, и, если он это делает, читать дальше (возможно, до EOF). Но движок Python этого не делает.
Редактировать 2:
Я взглянул на Python stdlib re.py
и связанные с ним модули. Фактическая генерация объекта регулярного выражения, включая его метод .match()
и другие, выполняется в расширении C. Таким образом, вы не можете получить к нему доступ и установить его для обработки потоков, если только вы не отредактируете исходники C напрямую и не создадите свою собственную версию Python.