Небольшой трик с регулярными выражениями который редко вижу в чужом коде.
Допустим, вам нужно распарсить простой текст и вытащить оттуда пары имя+телефон. Вернуть всё это надо в виде списка словарей. Возьмем очень простой пример текста.
>>> text = '''
>>> Alex:8999123456
>>> Mike:+799987654
>>> Oleg:+344456789
>>> '''
Соответственно, для выделения нужных элементов будем использовать группы. Получится такой паттерн:
(\w+):([\d+]+)
Как мы будем формировать словарь из найденных групп?
>>> import re
>>> results = []
>>> for match in re.finditer(r"(\w+):([\d+]+)", text):
>>> results.append({
>>> "name": match.group(1),
>>> "phone": match.group(2)
>>> })
>>> print(results)
[{'name': 'Alex', 'phone': '8999123456'}, ...]
Можно немного сократить запись используя zip
>>> results = []
>>> for match in re.finditer(r"(\w+):([\d+]+)", text):
>>> results.append(dict(zip(['name', 'phone'], match.groups())))
Но есть способ лучше! Это именованные группы в regex. Можно в паттерне указать имя группы и результат сразу забрать в виде словаря.
>>> for match in re.finditer(r"(?P<name>\w+):(?P<phone>[\d+]+)", text):
>>> results.append(match.groupdict())
То есть всё что я сделал, это добавил в начале группы (внутри сбокочек) такую запись:
(?P<group-name>...)
Теперь найденная группа имеет имя и можно обратиться к ней как к элементу списка
>>> name = match['name']
Либо забрать сразу весь словарь методом groupdict()
>>> match.groupdict()
#tricks#regex
👨🏫👩🏫 • Sobir Alishayevning doktorlik (PhD) dissertatsiyasi himoyasi bo‘lib o‘tadi
💻Batafsil va ZOOMga havola...
👨🏫👩🏫 • Состоится защита докторской диссертации (PhD) Собира Алишаева
💻Подробнее и ссылка на ZOOM...
👨🏫👩🏫 • Defense of the doctoral dissertation (PhD) of Sobir Alishaev will take place
💻More & ZOOM-link...
⚫️🔴🔵🟣⚪️@tsulofficial#phd#himoya#защита#defense
👨🏫👩🏫 • Muzaffar Nodirovning doktorlik (PhD) dissertatsiyasi himoyasi bo‘lib o‘tadi
💻Batafsil va ZOOMga havola...
👨🏫👩🏫 • Состоится защита докторской диссертации (PhD) Музаффара Нодирова
💻Подробнее и ссылка на ZOOM...
👨🏫👩🏫 • The defense of the doctoral dissertation (PhD) of Muzaffar Nodirov will take place
💻More & ZOOM-link...
👍❤️📩@tsulofficial#phd#himoya#защита#defense
👨🏫👩🏫 • Ulzana Raximovaning doktorlik (PhD) dissertatsiyasi himoyasi bo‘lib o‘tadi
💻Batafsil va ZOOMga havola...
👨🏫👩🏫 • Состоится защита докторской диссертaции (PhD) Рахимовой Ульзаны Хамидуллаевны
💻Подробнее и ссылка на ZOOM...
👨🏫👩🏫 • The defense of the doctoral dissertation (PhD) of Ulzana Rakhimova will take place
💻More & ZOOM-link...
👍❤️📩@tsulofficial#phd#himoya#защита#defense
👨🏫👩🏫 • Sarbon Uralovning doktorlik (PhD) dissertatsiyasi himoyasi bo‘lib o‘tadi
💻Batafsil va ZOOMga havola...
👨🏫👩🏫 • Состоится защита диссертации (PhD) Сарбона Уралова
💻Подробнее и ссылка на ZOOM...
👨🏫👩🏫 • The defense of the doctoral dissertation (PhD) of Sarbon Uralov will take place
💻More & ZOOM-link...
👍❤️📩@tsulofficial#phd#himoya#защита#defense
👨⚖️👩⚖️ • Dildora Kamalovaning doktorlik (DSc) dissertatsiyasi himoyasi bo‘lib o‘tadi
💻Batafsil va ZOOMga havola...
👨⚖️👩⚖️ • Состоится защита докторской диссертации (DSc) Дилдоры Камаловой
💻Подробнее и ссылка на ZOOM...
⚫️🔴🔵🟣⚪️@tsulofficial#DSc#himoya#защита#defense
ЭКО кондиционер для белья Mayeri All care - это европейский продукт, созданный по новейшим технологиям!
Бережно ухаживающий за всеми типами тканей: cмягчает ткани, снимает статическое электричество.
Без красителей, ароматизаторов, фосфатов. Экологически безопасный продукт для Вас, Вашей семьи и нашей планеты.
#ополаскиватель#mayeri#здоровье#польза#забота#для#белья
Цена: 42 000 сум
Арт: F351
———————————-
ECO mato yumshatuvchi Mayeri All Сare geli - bu eng yangi texnologiyalar yordamida yaratilgan Yevropa mahsulotidir!
Barcha turdagi matolarga ehtiyotkorlik bilan g'amxo'rlik qilish: matolarni yumshatadi, statik elektrni olib tashlaydi.
Bo'yoqlar, xushbo'y moddalar, fosfatlarsiz. Siz, oilangiz va sayyoramiz uchun ekologik toza mahsulot.
#chayuvchi#mayeri#sogliq#foyda#himoya#kiyim#uchun
Narx: 42 000 so'm
Art: F351