Небольшой трик с регулярными выражениями который редко вижу в чужом коде.
Допустим, вам нужно распарсить простой текст и вытащить оттуда пары имя+телефон. Вернуть всё это надо в виде списка словарей. Возьмем очень простой пример текста.
>>> 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
🔥 Top Blacksmiths #4 is NOW LIVE! 🔥
🏆 Rewards: Top 50 Blacksmiths will share 150,000 AURA
🎖 Reward Breakdown:
🥇 Top 1: 25K AURA
🥈 Top 2: 15K AURA
🥉 Top 3: 10K AURA
🏅 Top 4-10: 5K AURA
🏅 Top 11-20: 3K AURA
🏅 Top 21-30: 2K AURA
🏅 Top 31-40: 1K AURA
🏅 Top 41-50: 500 AURA
⏰ Duration: Mar 15, 14:00 UTC - Mar 29, 14:00 UTC
📌 Note: Leaderboard rank is based on Points. If Points are tied, higher pot tier ranks higher.
🔨 Prove you're the ultimate Blacksmith! 🏅
#SingSing#TopBlacksmiths
🎤Announcement| Mystic Garden Game |Chat| Spotlight Channel
🔥 Top Blacksmiths #3 is NOW LIVE! 🔥
🏆 Rewards: Top 50 Blacksmiths will share 150,000 AURA
🎖 Reward Breakdown:
🥇 Top 1: 25K AURA
🥈 Top 2: 15K AURA
🥉 Top 3: 10K AURA
🏅 Top 4-10: 5K AURA
🏅 Top 11-20: 3K AURA
🏅 Top 21-30: 2K AURA
🏅 Top 31-40: 1K AURA
🏅 Top 41-50: 500 AURA
⏰ Duration: Feb 15, 14:00 UTC - Mar 1, 14:00 UTC
📌 Note: Leaderboard rank is based on Points. If Points are tied, higher pot tier ranks higher.
🔨 Prove you're the ultimate Blacksmith! 🏅
#SingSing#TopBlacksmiths
🎤Announcement| Mystic Garden Game |Chat| Spotlight Channel
🔥 Top Blacksmiths #2 is NOW LIVE! 🔥
🏆 Rewards: Top 50 Blacksmiths will share 150,000 AURA + $100 $SING!
🎖 Reward Breakdown:
🥇 Top 1: 25K AURA + $20 $SING
🥈 Top 2: 15K AURA + $15 $SING
🥉 Top 3: 10K AURA + $10 $SING
🏅 Top 4-10: 5K AURA + $5 $SING each
🏅 Top 11-20: 3K AURA + $2 $SING each
🏅 Top 21-30: 2K AURA
🏅 Top 31-40: 1K AURA
🏅 Top 41-50: 500 AURA
⏰ Duration: Jan 15, 14:00 UTC - Feb 5, 14:00 UTC
📌 Note: Leaderboard rank is based on Points. If Points are tied, higher pot tier ranks higher.
🔨 Prove you're the ultimate Blacksmith! 🏅
#SingSing#TopBlacksmiths
🎤Announcement| Mystic Garden Game |Chat| Spotlight Channel
🔥 Top Blacksmiths #2 has ENDED! 🔥
Huge respect to all the Blacksmiths who fought till the last second! 🏆⚒️
🎁 Rewards will be distributed within 72h – stay tuned!
#TopBlacksmiths#Rewards
🎤Announcement| Mystic Garden Game |Chat| Spotlight Channel
🔥 LAST DAY of Top Blacksmiths #2! 🔥
⚒️ Top 50 Blacksmiths will share 150,000 AURA + $100 $SING! 🏆
📌 Ranking rules:
✅Leaderboard is based on Points
✅If tied, higher pot tier ranks higher
⏳ EndsFeb 5, 14:00 UTC – make your final push! 🚀
#TopBlacksmiths#AuraRewards
🎤Announcement| Mystic Garden Game |Chat| Spotlight Channel
🔧 Top Blacksmiths Event Update 🔧
Worried about points? Don’t be! 🎉
If points are equal, the player with the higher pot tier will rank higher. 🏆 The leaderboard is already set up with this rule, so forge away without a worry! 🛠✨
🔥 Keep forging and climb the ranks! 🔥
#MysticGarden#TopBlacksmiths#PlayToEarn#Web3Gaming
🎤Announcement| Mystic Garden Game |Chat | Spotlight Channel