@MrSel

Как вытащить из текста другого текст?

Делаю парсер на VPN ShadowSocks
Нужно из сообщений вытаскивать сами ключи
Пример:
(Какой-то текст) ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpUZXN0UGFzc3dvcmRAdGVzdC5hZGRyZXNzOjc3Nzc=#TestName (Какой-то текст) 
ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpUZXN0UGFzc3dvcmRAdGVzdC5hZGRyZXNzOjc3Nzc=#TestName (Какой-то текст)


Отсюда нужно вытащить все два ключа в список. Ключи все начинаются на ss:// и заканчиваются на #, =, либо пробел
  • Вопрос задан
  • 67 просмотров
Решения вопроса 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Есть как минимум два пути решения:
Первый путь - делать сплит строки по начальному фрагменту, получаем несколько кусков. Отбрасываем первый кусок, остальным делаем сплит по конечному фрагменту и оставляем первый кусок от каждого - это и будут ключи.
Второй путь - использовать regex с методом findall, с примерно таким паттерном:
/(ss:\/\/[a-zA-Z0-9]+=#)/gm
.
Ответ написан
@RobertV01
Если можешь редактировать текст то можно алгоритмом.
text = '(Какой-то текст) ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpUZXN0UGFzc3dvc... (Какой-то текст)
ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpUZXN0UGFzc3dvc... (Какой-то текст)'
text = text.replace('ss://', 'Ё') # Русских букв не вижу в ключах, заменю на Ё чтобы не проверять последующие 4 символа

refund = 1 # Флажок
perehod = 'ss://' # Временная переменная для ключей
keys = []
for i in range(len(text)):
if text[i] == 'Ё' and refund == 1:
refund = 0
continue
if refund == 0:
if text[i] != '#' and text[i] != '=' and text[i] != ' ':
perehod = perehod + text[i]
if (text[i] == '#' or text[i] == '=' or text[i] == ' ') and refund == 0:
keys.append(perehod + text[i])
perehod = 'ss://'
refund = 1
print(keys)

Вывод:
['ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpUZXN0UGFzc3dvc...', 'ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpUZXN0UGFzc3dvc...']
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы