Чтобы достать все срезы сразу из файла:
import re
from pathlib import Path
slices = re.findall(r'\-(.*?)\?', Path('файл.txt').read_text())
Если только из одной строки срез получить, чтобы реализовать псевдо-код line['-':'?']:
result = line[line.index('-')+1:line.index('?')]
при условии, что '?' не встречается до '-' в строке (что строки похожи на примеры в вопросе). Иначе:
i = line.index('-')
result = line[i+1:line.index('?', i)]
index() используется вместо find(), чтобы получить ValueError на неверных входных данных (в которых или '-' или '?' отсутствуют), вместо того чтобы молча вернуть неверный результат.
'-'или'?'в строке получить ValueError, а не скрытый баг. – jfs Apr 01 '17 at 17:06