Небольшой трик с регулярными выражениями который редко вижу в чужом коде.
Допустим, вам нужно распарсить простой текст и вытащить оттуда пары имя+телефон. Вернуть всё это надо в виде списка словарей. Возьмем очень простой пример текста.
>>> 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
📢 Russian military spokesperson claims victory over Ukrainian forces on the Southern Donetsk front. Enemy rotation disrupted, personnel and equipment destroyed. Counter-battery strikes hit enemy positions. Significant losses reported. The conflict in Ukraine remains unresolved. #WarUpdates
https://www.gazeta.ru/army/news/2023/11/05/21644377.shtml
Subscribe to @BadVolfNews
📢 Russian forces strike Ukrainian military targets! Over 160 hits on Krasnolimansk direction. Artillery units neutralized, assault squads defeated. Support from air and artillery. Command and observation posts attacked. New tactics observed by Ukrainian forces. #WarUpdates
https://www.gazeta.ru/army/news/2023/11/02/21625465.shtml
Subscribe to @BadVolfNews
📣 Russian troops seize Ukrainian stronghold near Ugledar in Donetsk People's Republic. 10 enemy soldiers caught off guard, 4 taken captive. Clever tactics employed, with one group approaching from the front and another from the rear. Victory for Russian forces! 💪🇷🇺#WarUpdates
https://www.gazeta.ru/army/news/2023/11/01/21617965.shtml
Subscribe to @BadVolfNews
📢 Russian forces gaining ground, Ukraine struggling to hold on. White House speculates Russia will secure tactical victories, cementing their dominance by spring. Crisis of conscription and dwindling weapon supplies weaken Ukraine's chances. Advisor warns Ukraine may not last till spring. Russian military holds the offensive initiative, pushing forward with success. Ukrainian strongholds predicted to fall, leading to a domino effect as the enemy flees. Official admits futility of fighting, claims US and Europe have abandoned Ukraine. US identifies major threats to Ukrainian Armed Forces. #WarUpdates#Ukraine#Russia
https://www.gazeta.ru/army/news/2023/10/28/21595081.shtml
Subscribe to @BadVolfNews
Ukraine’s paratroopers clear Berezove in Dnipropetrovsk Oblast, completing near-total reversal of Russia’s 2025 gains in the region
[Read FullArticle]
@WorldNews#UkraineNews#WarUpdates#DnipropetrovskIf
@syrianaanalysis breaks down Israel's strikes on Syria with Red Pilled, exploring how regional tensions are escalating and what it means for the axis of resistance.
#Israel#Syria#Hezbollah#MiddleEast#Gaza#WarUpdates#PoliticalAnalysis