Небольшой трик с регулярными выражениями который редко вижу в чужом коде.
Допустим, вам нужно распарсить простой текст и вытащить оттуда пары имя+телефон. Вернуть всё это надо в виде списка словарей. Возьмем очень простой пример текста.
>>> 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
Channel: Mark Levin Warroom
Members: ~45.65K
💢 Username: @markrlevin
Description:
Fan channel dedicated to the legendary lawyer, author, and radio personality Mark Levin — Not associated with or managed by Mark Download Mark’s podcast for free: https://www.marklevinshow.com/audio-rewind
🏷 Tags: #political
https://lve.to/yw8oatzx5k
Channel: AWAKENING WORLD - Truth & Secrets Revealed!
Members: ~39.09K
💢 Username: @greatawakeningworld
Description:
Awakening World Awakening The World & Escape the Matrix. All Truth & Secrets Revealed. Daily Awakening Real News! Free Access to Banned/Censured Videos & Docus. Join Us FREE Now! https://awakeningmatrix.com DM: @greatawakeningnews
🏷 Tags: #political
https://lve.to/joifldnfa9
Channel: il Donaldo Trumpo
Members: ~168.7K
💢 Username: @realdonaldotrumpo
Description:
THE REAL ACCOUNT OF THE ONLY IL DONALDO FRIGGIN TRUMPO!!!
🏷 Tags: #political
https://lve.to/wsedfq92hs
Channel: Fearless Report
Members: ~117.28K
💢 Username: @fearlessreport
Description:
Fearless and Ready to Fight for Truth in Reporting — *We Are Not Afraid*
🏷 Tags: #political
https://telegramchannels.me/channels/fearlessreport
Channel: Dan Scavino FORCE
Members: ~101.16K
💢 Username: @danscavinoforce
Description:
‘Dan Scavino FORCE’ is a patriotic fan channel dedicated to former WH deputy chief of staff & President Trump’s director of social media, Dan Scavino, sharing Dan’s original content as well as other MAGA-related stuff, and is not associated with Dan.
🏷 Tags: #political
https://telegramchannels.me/channels/danscavinoforce
Channel: W.H.Grampa
Members: ~5.69K
💢 Username: @whgrampa
Description:
️ Warning: Many users report that this account impersonates a famous person or organisation.
🏷 Tags: #political
https://telegramchannels.me/channels/whgrampa
Channel: Scott Ritter
Members: ~90.38K
💢 Username: @scottritter
Description:
An experienced military and geopolitical analyst with a proven track record of accuracy and integrity. You will be able to better comprehend complex problems and formulate adequate solutions. Advertising contact @n13cwg
🏷 Tags: #political
https://telegramchannels.me/channels/scottritter