В более ранних версиях Python до 3.7 вы можете использовать re.findall
с
r'(?sm)^\d{1,4} of \d{1,4} DOCUMENTS.*?(?=^\d{1,4} of \d{1,4} DOCUMENTS|\Z)'
См. Демонстрацию regex
Подробнее
(?sm)
- re.M
и re.S
опции для ^
- начало строки \d{1,4} of \d{1,4} DOCUMENTS
- от 1 до 4 цифр, пробел, of
, пробел, от 1 до 4 цифр, пробел и DOCUMENTS
подстрока .*?
- любые 0 или более символов, как можно меньше, вплоть до ближайшего (?=^\d{1,4} of \d{1,4} DOCUMENTS|\Z)
- ^\d{1,4} of \d{1,4} DOCUMENTS
шаблон или (|
) конец строки (\Z
).
См. Демонстрационную версию Python :
import re
s = "TEXT_HERE"
print(re.findall(r'^\d{1,4} of \d{1,4} DOCUMENTS.*?(?=\d{1,4} of \d{1,4} DOCUMENTS|\Z)', s, re.M | re.S))
# => ['1 of 1435 DOCUMENTS\nblabla (multiple lines)\n\n', '2 of 1435 DOCUMENTS\nblabla(multiple lines)\n', '3 of 1435 DOCUMENTS\nblabla(multiple lines)\n', '4 of 1435 DOCUMENTS\nblabla(multiple lines)\n\n', '5 of 1435 DOCUMENTS\n....']
В Python 3.7, где re.split
может делиться на совпадения нулевой длины, вы можете использовать
r'(?m)(?!\A)(?=^\d{1,4} of \d{1,4} DOCUMENTS)'
См. Демонстрационную версию regex .
Подробности
(?m)
- re.M
опция включена (?!\A)
- не в начале строки - (?=^\d{1,4} of \d{1,4} DOCUMENTS)
- сразу направо,должно быть начало строки, от 1 до 4 цифр, пробел, of
, пробел, от 1 до 4 цифр, пробел и DOCUMENTS
подстрока
Использование:
re.split(r'(?!\A)(?=^\d{1,4} of \d{1,4} DOCUMENTS)', text, flags=re.M)