Небольшой трик с регулярными выражениями который редко вижу в чужом коде.
Допустим, вам нужно распарсить простой текст и вытащить оттуда пары имя+телефон. Вернуть всё это надо в виде списка словарей. Возьмем очень простой пример текста.
>>> 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
#GRT/USDT analysis :
#GRT has broken out of its trendline with strong momentum following a bounce back from the support zone. The price is expected to maintain its bullish momentum and test previous highs. The current level presents a favorable entry opportunity.
TF : 1W
Entry : $0.2023
Target : $0.3446 and $0.4902
SL : $0.1450
#GRT/USDT analysis :
#GRT is currently in a downtrend, making lower lows (LLs) and lower highs (LHs), and is trading below the 200 EMA. The price is facing rejection from both the 200 EMA and the resistance zone. It is expected to decline from this point and potentially test the previous swing low.
TF : 1D
Entry : $0.1682
Target : $0.1294
SL : $0.1940
💰#GRT has a falling wedge pattern on 8H Time frame, we expec it will pump alot in the case of breakout, waiting now..⌛️
❄️@signals_bitcoin_crypto❄️
❄️@Shadow_support0o❄️
💰#GRT bounced back from the Support zone on 12H Time frame, we are waiting for breakup and pullback to the broken trendline 💫
❄️@signals_bitcoin_crypto❄️
❄️@Shadow_support0o❄️