Отрезать последнее предложение Python
Дана строка: 'В Москве с 1 июля на 4,6% поднялись цены на услуги ЖКХ. Соответствующее распоряжение в прошлом году...'
Необходимо отрезать последнее предложение 'Соответствующее распоряжение в прошлом году...', нужно учесть что перед последним предложением могут стоять знаки обозначающие конец предложения [.!?]. И если, например, нет обозначающих знаков конца перед последним предложением то не отрезать. Например такое предложение: 'Коронавирус, победили...'
Пробовала так: r'((?![.!?] ).)*[.!?]$ - отрезает, но и отрезает пример с коронавирусом тоже.
Мысли были такие: идти с конца строки циклом, который бы искал знак который бы обозначал конец строки [.!?], если находилось то отрезать нужный кусок, т.е последнее предложение. Но я не понимаю как реализовать.
Примерно так пыталась, но тут возникает проблема, если делать вот так:
x = 'будет призывать своих сторонников бананов приходить на участки лишь в последний день. По мнению булочки, так поступить нужно для того, чтобы...'
f = x[:-3]
for i in reversed(f):
if i in ['?','!','.']:
result = re.sub(r'((?![.!?] ).)*[.!?]$', r'', x)
print(result)
else:
print(x)
Цикл выдаст и результаты которые мне подходят, и результаты которые нет.
Ответы (1 шт):
Возможно вам подойдёт вот такое выражение: (?<=[^.!?][.!?])[^.!?]+[.!?]+$'
import re
for x in ('будет призывать своих сторонников бананов приходить на участки лишь в последний день. По мнению булочки, так поступить нужно для того, чтобы...',
'В Москве с 1 июля на 4,6% поднялись цены на услуги ЖКХ. Соответствующее распоряжение в прошлом году...',
'Коронавирус, победили...',
'Один. Два? Три! Четыре!'):
print(re.sub(r'(?<=[^.!?][.!?])[^.!?]+[.!?]+$', '', x))
Результат:
будет призывать своих сторонников бананов приходить на участки лишь в последний день.
В Москве с 1 июля на 4,6% поднялись цены на услуги ЖКХ.
Коронавирус, победили...
Один. Два? Три!