Нужна помощь по извлечению текста
Есть текст. Например, "Джексон: текст. Норрисон: говорит текст. еще говорит. дальше говорит. Джексон: текст. Норрисон: говорит текст. " Мне нужно вытащить все, что говорит Норрисон.
Регулярка "Норрисон:(.+?\.)", например, помогает только первое предложение взять, а нужно все что относится к персонажу.
Помогите плиз, может кто подскажет как правильно регулярное выражение составить.
Ответы (2 шт):
В регулярке укажите что должна быть группа символов без двоеточий ([^:]+), заканчивающаяся на точку (\.). Вопрос после + не ставьте, иначе так и будет находить до первой точки (наименьшую группу).
Пример:
import re
text = "Джексон: текст Джексона. Норрисон: текст Норрисона. еще говорит. дальше говорит. Джексон: текст. Норрисон: опять текст Норрисона. "
result = re.findall(r"Норрисон: ([^:]+\.)", text)
print(result)
Вывод:
['текст Норрисона. еще говорит. дальше говорит.', 'опять текст Норрисона.']
Более общий вариант с извлечением имен:
import re
text = "Джексон: текст Джексона. Норрисон: текст Норрисона. еще говорит. дальше говорит. Джексон: текст. Еще текст Джексона. Норрисон: опять текст Норрисона. "
result = re.findall(r"(\w+): ([^:]+\.)", text)
print(result)
Вывод:
[('Джексон', 'текст Джексона.'), ('Норрисон', 'текст Норрисона. еще говорит. дальше говорит.'), ('Джексон', 'текст. Еще текст Джексона.'), ('Норрисон', 'опять текст Норрисона.')]
Попробуйте воспользоваться позитивным просмотром вперед:
Норрисон:.*?(?=\.[ \t]*\S+:|\Z)
Захватываем весь текст до следующего говорящего (текст:) или конца строки \Z