Я пытаюсь получить список полных предложений из открытого текста, используя регулярное выражение в python 2.7. Для меня не важно, чтобы все, что может быть истолковано как полное предложение, было в списке, но все в списке должно быть полным предложением. Ниже приведен код, иллюстрирующий проблему:
import re
text = "Hello World! This is your captain speaking."
sentences = re.findall("[A-Z]\w+(\s+\w+[,;:-]?)*[.!?]", text)
print sentences
Согласно этому тестеру регулярных выражений, теоретически я должен получить такой список:
>>> ["Hello World!", "This is your captain speaking."]
Но вывод, который я на самом деле получаю, выглядит следующим образом:
>>> [' World', ' speaking']
документация указывает, что findall выполняет поиск слева направо и что * и + операторы обрабатываются жадно. Цените помощь.
(...)
на группу без захвата(?:...)
. (и первые от\w+
до\w*
). Ваша проблема не имеет ничего общего с жадностью. - person Casimir et Hippolyte   schedule 07.05.2017\\
внутри необработанной строки. Этот вопрос более четко затрагивает суть одной проблемы, а именно поведения re.findall() при захвате групп. - person Raymond Hettinger   schedule 07.05.2017