Отрезать последнее предложение 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 шт):

Автор решения: GrAnd

Возможно вам подойдёт вот такое выражение: (?<=[^.!?][.!?])[^.!?]+[.!?]+$'

import re

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

Результат:

будет призывать своих сторонников бананов приходить на участки лишь в последний день.
В Москве с 1 июля на 4,6% поднялись цены на услуги ЖКХ.
Коронавирус, победили...
Один. Два? Три!
→ Ссылка