Чтобы сделать это, вам нужно найти номера строк, когда ваш шаблон встречается, а затем получить строки выше, вычитая 1 из найденных номеров строк. Например, если ваш шаблон встречается в строках 2 и 4, вам нужно получить строки 1 и 3. Пожалуйста, посмотрите пример кода ниже:
import re
string = """Text 1
28-Apr
Text2
Text3
29-Apr"""
pattern = '\d*\-\w*'
lines_number = []
for m in re.finditer(pattern, string):
start = m.start()
lineno = string.count('\n', 0, start)
lines_number.append(lineno)
for l in lines_number:
print(string.split('\n')[l-1])