Небольшой трик с регулярными выражениями который редко вижу в чужом коде.
Допустим, вам нужно распарсить простой текст и вытащить оттуда пары имя+телефон. Вернуть всё это надо в виде списка словарей. Возьмем очень простой пример текста.
>>> 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
#quoteoftheday
💬“If you are not embarrassed by the first version of your product, you launched too late.” — Reid Hoffman, LinkedIn co-founder
🚀 While you are redesigning your logo for the tenth time, someone else is already monetizing their product at the MVP stage.
Follow Startup Base to stay updated on startups, opportunities, and the latest trends.
@startupbaseuz
LinkedIn | Facebook | Instagram | Website
#quoteoftheday
💬“Agar mahsulotingizning birinchi versiyasidan uyalmasangiz, siz uni juda kech ishga tushiribsiz”—Rid Hofman, LinkedIn asoschilaridan biri
🚀Siz logotipni o‘ninchi bor o‘zgartirayotganingizda, kimdir allaqachon mahsulotini MVP’da pullayapti.
Startaplar, ularga oid imkoniyatlar va trendlardan xabardor bo‘lish uchun Startup Base’ni kuzatib boring.
@startupbaseuz
LinkedIn | Facebook | Instagram | Website
☀️#Quoteoftheday
😇“Don't let yesterday take up too much of today.”
- Will Rogers
❤️@QuotesPoint
✅@Quotes_Positive_Inspirational
✔️@Quotes_Motivational_Inspiring
☀️#Quoteoftheday
😇“You cannot protect yourself from sadness without protecting yourself from happiness.”
- Jonathan Safran Foer
❤️@QuotesPoint
✅@Quotes_Positive_Inspirational
✔️@Quotes_Motivational_Inspiring
☀️#Quoteoftheday
😇“It's up to you how far you go. If you don't try, you'll never know!”
- Merlin, "Sword in the Stone"
❤️@QuotesPoint
✅@Quotes_Positive_Inspirational
✔️@Quotes_Motivational_Inspiring
☀️#Quoteoftheday
😇“Pursue the things you love doing and then do them so well that people can’t take their eyes off of you.”
- Maya Angelou
❤️@QuotesPoint
✅@Quotes_Positive_Inspirational
✔️@Quotes_Motivational_Inspiring
☀️#Quoteoftheday
😇“This is your life. Do what you love, and do it often.”
- Holstee Manifesto
❤️@QuotesPoint
✅@Quotes_Positive_Inspirational
✔️@Quotes_Motivational_Inspiring
☀️#Quoteoftheday
😇“Focus is the art of knowing what to ignore.”
- James Clear
❤️@QuotesPoint
✅@Quotes_Positive_Inspirational
✔️@Quotes_Motivational_Inspiring
☀️#Quoteoftheday
😇“Always remember that the future comes one day at a time.”
- Dean Acheson
❤️@QuotesPoint
✅@Quotes_Positive_Inspirational
✔️@Quotes_Motivational_Inspiring