Небольшой трик с регулярными выражениями который редко вижу в чужом коде.
Допустим, вам нужно распарсить простой текст и вытащить оттуда пары имя+телефон. Вернуть всё это надо в виде списка словарей. Возьмем очень простой пример текста.
>>> 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
Want a new, affordable home near your parents/ nature/ the city? Say no more, fam! 😎
We’re developing new housing areas across the island to meet housing demand, including Chencharu in Yishun, Bayshore, Mount Pleasant, Keppel, and Pearl’s Hill. With a wide variety of flats being planned, there will be a home for every budget and every need. #COS2024
#COS2024 MSE announced initiatives that will help Singapore press on towards net zero, protect our coastlines, and ensuring Singapore’s food security and safety. More ⬆️
Infographics: MSE
At #COS2024, the Singapore Government Partnerships Office was launched to facilitate engagements with Singaporeans. MCCY will also continue to strengthen the culture of care in Singapore to support lower-income families and those in need.
Infographics: MCCY
Sports, and arts and heritage are integral to Singapore’s shared identity. MCCY announced at #COS2024 enhanced support and new developments to encourage a vibrant sporting and arts environment.
Infographics: MCCY
At #COS2024, MOH highlighted key efforts to improve preventive health and aged care, and to expand hospital capacity and settings to include mental health services. MediShield Life will also be enhanced to provide Singaporeans with greater assurance.
More info ⬆️
Infographics: MOH
#COS2024 Find out how MOT is enhancing our transport systems to improve inclusivity, connectivity and sustainability for our commute, and growing the industries for livelihoods. ⬆️
Infographics: MOT
Key housing initiatives introduced at #COS2024 include more homes in the pipeline to increase supply, increased support for young and lower-income families to own their home, and building of elder-friendly homes and neighbourhoods.
More info ⬆️
Infographics: MND
#COS2024 MND announced new initiatives that keep public housing affordable, rejuvenate heartlands, and create a sustainable and inclusive city. Check out the initiatives ⬆️
Infographics: MND
#COS2024 Ministry of Manpower will continue strengthening support for workers and businesses amid global economic uncertainties. These include uplifting older and lower-wage workers through changes to the CPF system, enhanced Workfare schemes, and introducing Tripartite Guidelines on Flexible Work Arrangement Requests for progressive workplaces. Find out more ⬆️
Infographics: MOM
At #COS2024, MOE introduced various initiatives that will help re-envision learning, helping all Singaporean students pursue their dreams. Find out more ⬆
Infographics: MOE
#COS2024 MCI announced its plans to invest in Singaporeans and local businesses to help them leverage emerging technologies to remain competitive.
Infographic: MCI