Я пытаюсь разобрать строку с несколькими строками.
Предположим, это:
text = '''
Section1
stuff belonging to section1
stuff belonging to section1
stuff belonging to section1
Section2
stuff belonging to section2
stuff belonging to section2
stuff belonging to section2
'''
Я хочу использовать метод finditer модуля re, чтобы получить словарь, например:
{'section': 'Section1', 'section_data': 'stuff belonging to section1\nstuff belonging to section1\nstuff belonging to section1\n'}
{'section': 'Section2', 'section_data': 'stuff belonging to section2\nstuff belonging to section2\nstuff belonging to section2\n'}
Я пробовал следующее:
import re
re_sections=re.compile(r"(?P<section>Section\d)\s*(?P<section_data>.+)", re.DOTALL)
sections_it = re_sections.finditer(text)
for m in sections_it:
print m.groupdict()
Но это приводит к:
{'section': 'Section1', 'section_data': 'stuff belonging to section1\nstuff belonging to section1\nstuff belonging to section1\nSection2\nstuff belonging to section2\nstuff belonging to section2\nstuff belonging to section2\n'}
Таким образом, section_data также соответствует Section2.
Я также попытался сказать второй группе, чтобы она соответствовала всем, кроме первой. Но это вообще ни к чему не приводит.
re_sections=re.compile(r"(?P<section>Section\d)\s+(?P<section_data>^(?P=section))", re.DOTALL)
Я знаю, что мог бы использовать следующий ре, но я ищу версию, где мне не нужно рассказывать, как выглядит вторая группа.
re_sections=re.compile(r"(?P<section>Section\d)\s+(?P<section_data>[a-z12\s]+)", re.DOTALL)
Большое спасибо!
r"(?:(?P<section>Section\d)\s*(?P<section_data>.+?))+"
? - person Aprillion   schedule 11.04.2013