Задать вопрос

Как отлавливать нужные строки регулярным выражением?

У меня есть входные данные такого типа:
RSR/USDT
SHORT

Leverage 20x
Entries 0.0070
Target 1 0.0069
Target 2 0.0067
Target 3 0.0065
Target 4 0.0050
Target 5 0.0045

SL 0.0075

Мне нужно превратить их в это:
#RSR
Вход в сделку SHORT:RSRUSDT
Цена входа: 0.0070
Цели: 0.0069- 0.0067 - 0.0065 - 0.0050 - 0.0045
Стоп лосс: 0.0075

Плечо: 20x
Но я не понимаю как мне отловить несколько строчек и превратить их в одну
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Средний 5 комментариев
Решения вопроса 1
SoreMix
@SoreMix
yellow
targets = '-'.join([target[1] for target in re.findall(r'(Target\s+\d+\s+(.+)?\n)', s)])

print(re.sub(r'((.+)/.+)?\n+(.+?)\n+Leverage\s+(.+?)\n+Entries\s+(.+?)\n(Target\s+\d+\s+(.+)?\n)+\s+SL\s+(.+?)$', rf'#\g<2>\nВход в сделку \g<3>:\g<1>\nЦена входа: \g<5>\nЦели: {targets}\nСтоп лосс: \g<8>\n\nПлечо: \g<4>', s))


Жаль, что не знаю как в цикле сделать sub. Было бы прикольней
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
seven5674
@seven5674
Старый я уже что бы что-то в себе менять
тупо в лоб :) и смею предположить что мое кунг-фу будет по шустрее чем re :)

s = "..."
l = s.split()

print("#{}".format(l[0].split("/")[0]))
print("Выход на слелку {}:{}".format(l[1], ''.join(l[0].split("/"))))
print("Цена входа: {}".format(l[5]))
print("Цели: {}".format('-'.join(l[8:-2:3])))
print("Стоп лосс: {}".format(l[-1]))
print("\nПлечо: {}".format(l[3]))

и...
#RSR
Выход на сделку SHORT:RSRUSDT
Цена входа: 0.0070
Цели: 0.0069-0.0067-0.0065-0.0050-0.0045
Стоп лосс: 0.0075

Плечо: 20x
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Тут вообще не нужна никакая регулярка. Обычный императивный цикл будет более supportable. Тем более что формат этого торгового сообщения настолько простой насколько может быть например простой http-протокол.

Разделители - переводы строк и двойные переводы строк. Красота.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы