Вы можете использовать (?:(?:d+.s+)?[A-Z].*?[.!?]s*)+
.
import re
print(re.findall(r'(?:(?:d+.s+)?[A-Z].*?[.!?]s*)+', '1. Sentence 1. Sentence 2? Sentence 3!'))
Эти результаты:
['1. Sentence 1. Sentence 2? Sentence 3!']
Или, если вы предпочитаете разделять их на 3 разных элемента в списке:
import re
print(re.findall(r'(?:(?:d+.s+)?[A-Z].*?[.!?])', '1. Sentence 1. Sentence 2? Sentence 3!'))
Эти результаты:
['1. Sentence 1.', 'Sentence 2?', 'Sentence 3!']