Вывод информации из строки
Есть строка типа "Фам: Иванов, Имя: Иван.№гр - 35/3Студент Бег, лыжи и отжимания". Четвертый час перебираю тему регулярок, не могу прийти к тому, чтобы из строки получить что-то вроде:
{
'surname': 'Иванов',
'name': 'Иван',
'group': '35/3',
'category': 'Студент',
'disciplines': 'Бег, лыжи и отжимания'
}
Что пробовал - в тупую слайсами от индекса по 'Фам: ' до индекса ', Имя: '. Но тут проблема на уровне, например, группы, где цифры, тогда без регулярок не обойтись. И тут я начал копать в regexp. И может губа и не дура, но хотелость бы что-то вроде
surname, name, group = re.format('Фам: \w+, Имя: \w+.№гр - (\d{2}\/\d)')
PS: разумеется, метод вымышленный, как и половина написанного в аргументе. Буду рад любым предложениям
Ответы (2 шт):
если формат строки РОВНО такой, как вы написали, то вам подойдет такая регуляка:
Фам: (\D+), Имя: (\D+)\.№гр - (\d+\/\d+)(\D+?) (\D+)
тут 4 группы, каждая олицетворяет отдельный ключ словаря, который вы стремитесь получить
немного дополню предыдущий вариант:
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': 'Бег, лыжи и отжимания'}