import re
s = ['foo 1',
"foo 2 don't capture this text",
'3 foo',
'4 foo capture this text',
'foo 1 2 3']
pat = r'^(?:(?P<start_number>\d+) (?P<name>.+)|(?P<name2>.*?) ?(?P<end_number>\d+).*)$'
for x in s:
m = re.search(pat, x)
if m and m.group("start_number"):
print("{0}, {1}".format(m.group("start_number"), m.group("name")))
elif m and m.group("end_number"):
print("{0}, {1}".format(m.group("end_number"), m.group("name2")))
aW1wb3J0IHJlCnMgPSBbJ2ZvbyAxJywKImZvbyAyIGRvbid0IGNhcHR1cmUgdGhpcyB0ZXh0IiwKJzMgZm9vJywKJzQgZm9vIGNhcHR1cmUgdGhpcyB0ZXh0JywKJ2ZvbyAxIDIgMyddCnBhdCA9IHInXig/Oig/UDxzdGFydF9udW1iZXI+XGQrKSAoP1A8bmFtZT4uKyl8KD9QPG5hbWUyPi4qPykgPyg/UDxlbmRfbnVtYmVyPlxkKykuKikkJwpmb3IgeCBpbiBzOgoJbSA9IHJlLnNlYXJjaChwYXQsIHgpCglpZiBtIGFuZCBtLmdyb3VwKCJzdGFydF9udW1iZXIiKToKCQlwcmludCgiezB9LCB7MX0iLmZvcm1hdChtLmdyb3VwKCJzdGFydF9udW1iZXIiKSwgbS5ncm91cCgibmFtZSIpKSkKCWVsaWYgbSBhbmQgbS5ncm91cCgiZW5kX251bWJlciIpOiAKCQlwcmludCgiezB9LCB7MX0iLmZvcm1hdChtLmdyb3VwKCJlbmRfbnVtYmVyIiksIG0uZ3JvdXAoIm5hbWUyIikpKQ==