Небольшой трик с регулярными выражениями который редко вижу в чужом коде.
Допустим, вам нужно распарсить простой текст и вытащить оттуда пары имя+телефон. Вернуть всё это надо в виде списка словарей. Возьмем очень простой пример текста.
>>> 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
🌹🌼 Bienvenido #marzo🌻🌺
🥳 Muchas felicidades 🎊
para todos los
♓ Piscis y ♈ Aries
que cumplen
años este mes
Acá les dejamos una ✨#frase motivacional✨🤲💖
Si tienes el poder de hacer feliz a alguien, hazlo. El mundo necesita más de eso.
Y recuerden que si hacen un pedido en su cumpleaños reciben un DESCUENTO de hasta el 10% 🎂
Con el reporte para el lunes 02 de #marzo, el dólar oficial abre el nuevo mes consolidando la tendencia alcista de febrero y quedando a tan solo céntimos de la barrera de los 420 bolívares.
📊Análisis 02-Mar (Publicado hoy)
* USD: 419,98 Bs. (+2,63 Bs.) 📈
* EUR: 495,60 Bs. (+2,49 Bs.) 🚀
* CNY: 61,24 Bs.
* RUB: 5,44 Bs.
@DolarBCV
📈Corte Semanal (Lun 23-Feb al Lun 02-Mar)
* Lunes 23-Feb: 405,35 Bs.
* Lunes 02-Mar: 419,98 Bs.
* Variación de lunes a lunes: +14,63 Bs. (+3,61%) 🚩
Clave: El ritmo de devaluación no da tregua al iniciar marzo. El incremento de hoy (+0,63%) mantiene la inercia con la que cerró febrero. Por su parte, el Euro ya se ubica por encima de los 495 Bs., lo que sugiere que la barrera de los 500 bolívares podría ser alcanzada esta misma semana si persiste el ajuste promedio de 2 a 3 bolívares diarios.
#dolar
#euro
#noticias