r"\."+".+"+"apple"+".+"+"\."
Эта линия немного странная; зачем объединять столько отдельных строк? Вы можете просто использовать r'..+apple.+.'.
В любом случае, проблема с вашим регулярным выражением заключается в его жадности. По умолчанию x+
будет соответствовать x
так часто, как это возможно. Таким образом, ваш .+
будет соответствовать как можно большему количеству символов (любых символов); включая точки и apple
s.
Вместо этого вы хотите использовать нежадное выражение; обычно это можно сделать, добавив ?
в конце: .+?
.
В результате вы получите следующий результат:
['.I like to eat apple. Me too.']
Как видите, вы больше не получаете оба предложения с яблоками, но по-прежнему получаете Me too.
. Это потому, что вы все еще соответствуете .
после apple
, что делает невозможным не захватить и следующее предложение.
Рабочее регулярное выражение будет таким: r'\.[^.]*?apple[^.]*?\.'
Здесь вы не смотрите на какие-либо символы, а только на те символы, которые сами по себе не являются точками. Мы также разрешаем вообще не совпадать ни с какими символами (поскольку после apple
в первом предложении нет символов, отличных от точки). Использование этого выражения приводит к следующему:
['.I like to eat apple.', ". Let's go buy some apples."]
person
poke
schedule
16.04.2013