.*?
- это нежадный т.е. он будет соответствовать наименьшей подстроке, вам нужна версия жадная , т.е. .*
(соответствует самой длинной подстроке) для последней:
In [1143]: a = '#232 - Hello There'
In [1144]: re.findall('#(.*?) - (.*?)', a)
Out[1144]: [('232', '')]
In [1145]: re.findall('#(.*?) - (.*)', a)
Out[1145]: [('232', 'Hello There')]
Но вы должны использовать str
методы для обработки таких простых случаев, например, используя str.split
с разделением на -
:
In [1146]: a.split(' - ')
Out[1146]: ['#232', 'Hello There']
С str.partition
на -
и нарезкой:
In [1147]: a.partition(' - ')[::2]
Out[1147]: ('#232', 'Hello There')