Условное разбиение текстового файла на Python

Надеюсь, это довольно простой вопрос. У меня есть стенограмма, которую я пытаюсь разбить на куски каждого оратора. Код, который у меня сейчас есть, есть;

text = '''
Speaker 1: hello there

this is some text. 

Speaker 2: hello there, 

this is also some text.
'''

a = text.split('\nSpeaker')

Это разбивает текст так, как я бы этого хотел, однако я пропускаю идентификатор "Динамик" из второго высказывания. Я должен был бы сохранить это в целях идентификации. В частности, я пытаюсь получить результат, сродни следующему;

['Speaker 1: hello there\n\nI am checking to see if this works. \n', ' Speaker2: 
Hopefully it will, \n\nit seems pretty straightforward.\n']

Любые предложения приветствуются

Спасибо

2 ответа

Решение

re.split в многострочном режиме, сопоставление \n (новая строка), с положительным прогнозом нулевой ширины, чтобы соответствовать Speaker ((?=Speaker)):

re.split(r'\n(?=Speaker)', text, flags=re.MULTILINE)

Пример:

In [228]: text = '''Speaker 1: hello there
     ...: 
     ...: this is some text. 
     ...: 
     ...: Speaker 2: hello there, 
     ...: 
     ...: this is also some text.
     ...: '''

In [229]: re.split(r'\n(?=Speaker)', text, flags=re.MULTILINE)
Out[229]: 
['Speaker 1: hello there\n\nthis is some text. \n',
 'Speaker 2: hello there, \n\nthis is also some text.\n']

Решение без регулярных выражений:

['Speaker' + substr for substr in text.split('Speaker')[1:]]

выход

['Speaker 1: hello there\n\nthis is some text. \n\n',
 'Speaker 2: hello there, \n\nthis is also some text.\n']
Другие вопросы по тегам