Вывод информации из строки

Есть строка типа "Фам: Иванов, Имя: Иван.№гр - 35/3Студент Бег, лыжи и отжимания". Четвертый час перебираю тему регулярок, не могу прийти к тому, чтобы из строки получить что-то вроде:

{
   'surname': 'Иванов',
   'name': 'Иван',
   'group': '35/3',
   'category': 'Студент',
   'disciplines': 'Бег, лыжи и отжимания'
}

Что пробовал - в тупую слайсами от индекса по 'Фам: ' до индекса ', Имя: '. Но тут проблема на уровне, например, группы, где цифры, тогда без регулярок не обойтись. И тут я начал копать в regexp. И может губа и не дура, но хотелость бы что-то вроде

surname, name, group = re.format('Фам: \w+, Имя: \w+.№гр - (\d{2}\/\d)')

PS: разумеется, метод вымышленный, как и половина написанного в аргументе. Буду рад любым предложениям


Ответы (2 шт):

Автор решения: finally

если формат строки РОВНО такой, как вы написали, то вам подойдет такая регуляка:

Фам: (\D+), Имя: (\D+)\.№гр - (\d+\/\d+)(\D+?) (\D+)

тут 4 группы, каждая олицетворяет отдельный ключ словаря, который вы стремитесь получить

→ Ссылка
Автор решения: SergFSM

немного дополню предыдущий вариант:

from re import search

d={
   'surname': None,
   'name': None,
   'group': None,
   'category': None,
   'disciplines': None
}
text="Фам: Иванов, Имя: Иван.№гр - 35/3Студент Бег, лыжи и отжимания"

s=search(r'Фам: (?P<surname>\D+), Имя: (?P<name>\D+)\.№гр - (?P<group>\d+\/\d+)(?P<category>\D+?) (?P<disciplines>\D+)', text)

for k in d: d[k]=s.group(k)
print(d)

# {'surname': 'Иванов', 'name': 'Иван', 'group': '35/3', 'category': 'Студент', 'disciplines': 'Бег, лыжи и отжимания'}

или можно еще упростить:

text="Фам: Иванов, Имя: Иван.№гр - 35/3Студент Бег, лыжи и отжимания"

s=search(r'Фам: (?P<surname>\D+), Имя: (?P<name>\D+)\.№гр - (?P<group>\d+\/\d+)(?P<category>\D+?) (?P<disciplines>\D+)', text)

d = s.groupdict()
print(d)  # {'surname': 'Иванов', 'name': 'Иван', 'group': '35/3', 'category': 'Студент', 'disciplines': 'Бег, лыжи и отжимания'}
→ Ссылка