Как извлечь блоки текста регулярным выражением?
Есть файлы, содержащие первой строкой тему билетов.
Далее идут билеты.
Хочу получить содержимое каждого билета, включающее в том числе и номер билета.
import re
from typing import List
content = """\
Тема: Бла Бла Бла
Билет №1
1. валдывлдывладвылавыл
2. ldekldkldkldkld dkfdk
3. dkjkdjksdjdsjfdsj
Билет №2
1. вwdsалдывлдывладвылавыл
2. asdladekldkldkldkld dkfdk
3. dkjkdjksdjdsjfdsj
4. ldekldkldkldkld dkfdk
Билет №3
1. sadвwdsалд ывлдывлад вылавыл
2. asdsd ladekldkldkldkld dkfdk
3. asddkjkdjk sdjdsjfdsj
4. s ldekldkldksaldkld dkfdk
5. edk jkdjksdjdsjfdsj
Билет №4
1. sdsadвwdsалд ывлдывлад вылавыл
2. Dasdsd ladekldkldkldkld dkfdk
"""
def quiz(s) -> List[str]:
regexp = re.compile(r'Билет №\d{1,3}')
return regexp.split(s)[1:]
for item in quiz(content):
print(item, end='---')
Результат:
1. валдывлдывладвылавыл 2. ldekldkldkldkld dkfdk 3. dkjkdjksdjdsjfdsj --- 1. вwdsалдывлдывладвылавыл 2. asdladekldkldkldkld dkfdk 3. dkjkdjksdjdsjfdsj 4. ldekldkldkldkld dkfdk --- 1. sadвwdsалд ывлдывлад вылавыл 2. asdsd ladekldkldkldkld dkfdk 3. asddkjkdjk sdjdsjfdsj 4. s ldekldkldksaldkld dkfdk 5. edk jkdjksdjdsjfdsj --- 1. sdsadвwdsалд ывлдывлад вылавыл 2. Dasdsd ladekldkldkldkld dkfdk ---
А я хочу, что получить информацию с номером билета, например:
Билет №3 1. sadвwdsалд ывлдывлад вылавыл 2. asdsd ladekldkldkldkld dkfdk 3. asddkjkdjk sdjdsjfdsj 4. s ldekldkldksaldkld dkfdk 5. edk jkdjksdjdsjfdsj
Как этого добиться используя регулярные выражения?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Попробуйте так:
res = re.findall(r"(Билет.*?)(?:[\r\n]{2,}|$)", content, flags=re.S)
Результат:
In [133]: res
Out[133]:
['Билет №1\n1. валдывлдывладвылавыл\n2. ldekldkldkldkld dkfdk\n3. dkjkdjksdjdsjfdsj',
'Билет №2\n1. вwdsалдывлдывладвылавыл\n2. asdladekldkldkldkld dkfdk\n3. dkjkdjksdjdsjfdsj\n4. ldekldkldkldkld dkfdk',
'Билет №3\n1. sadвwdsалд ывлдывлад вылавыл\n2. asdsd ladekldkldkldkld dkfdk\n3. asddkjkdjk sdjdsjfdsj\n4. s ldekldkldksaldkld dkfdk\n5. edk jkdjksdjdsjfdsj',
'Билет №4\n1. sdsadвwdsалд ывлдывлад вылавыл\n2. Dasdsd ladekldkldkldkld dkfdk']