Разобрать строку регулярным выражением python
Нужно разобрать строку, например:
line = '1) среднее профессиональное (Дошкольное образование; Воспитатель дошкольного образования); 2) высшее (Дошкольная педагогика и психология; Преподаватель дошкольной педагогики и психологии)'
Нужно разобрать ее чтобы получилось следующее:
post = [{ edu: 'Cреднее профессиональное',
qualification: 'Дошкольное образование; Воспитатель дошкольного образования'}, ...]
Используя python re:
_line = re.sub(r'\([^()]*\)', '', post).title()
print(_line)
1) Среднее Профессиональное ; 2) Высшее
_line = _line.split(';')
print(_line)
['1) Среднее Профессиональное ', ' 2) Высшее ']
Получился список, а как вытащить значения в скобках, не понятно
Ответы (2 шт):
Автор решения: GrAnd
→ Ссылка
import re
line = '1) среднее профессиональное (Дошкольное образование; Воспитатель дошкольного образования); 2) высшее (Дошкольная педагогика и психология; Преподаватель дошкольной педагогики и психологии)'
fields = ('edu', 'qualification')
result = [dict(zip(fields, x)) for x in re.findall(r'\d+\)\s*(.*?)\s*\((.*?)\)', line)]
print(result)
[{'edu': 'среднее профессиональное', 'qualification': 'Дошкольное образование; Воспитатель дошкольного образования'},
{'edu': 'высшее', 'qualification': 'Дошкольная педагогика и психология; Преподаватель дошкольной педагогики и психологии'}]
Автор решения: SergFSM
→ Ссылка
можно еще так попробовать:
from re import finditer
line = '1) среднее профессиональное (Дошкольное образование; Воспитатель дошкольного образования); 2) высшее (Дошкольная педагогика и психология; Преподаватель дошкольной педагогики и психологии)'
post = [i.groupdict() for i in finditer(r'\d+\) (?P<edu>.*?) \((?P<qualification>.*?)\)',line)]
вывод:
[{'edu': 'среднее профессиональное',
'qualification': 'Дошкольное образование; Воспитатель дошкольного образования'},
{'edu': 'высшее',
'qualification': 'Дошкольная педагогика и психология; Преподаватель дошкольной педагогики и психологии'}]