Найти полную строку, начинающуюся со слова из ответа на запрос

#python #regex #python-requests #re

#python #регулярное выражение #python-запросы #python-re

Вопрос:

Как я могу получить полную строку, соответствующую слову, из объекта запроса

Например, у меня есть response=request.get(url) и print(response.text), и предположим, что если на выходе есть следующие строки, я пытаюсь получить полное слово, начинающееся с file_path и ожидаемого результата как «file_path: /opt/temp»

пользователь: abcd
search_file: f-abc-123
file_path: /opt/temp
ветка: разработка
email_to: abc@gmail.com
версия: 1.10.00

Ниже приведен мой код, который, похоже, не работает

 import re
import requests
response=request.get("https://artifactory.com",header=(..),verify=False)
res=re.search(r'file_pathw ',response.text)
print(res.group(0))
  

Вывод, который я получил:
file_path

Ожидаемый результат:
file_path: /opt/temp

Комментарии:

1. Добавьте также свой вывод и ожидаемый результат

2. И проверьте свою схему URL.

3. попробуйте res = re.search(r'file_path: .*',item).group(0)

4. @KlausD. Для меня это выглядит как структурированный ответ. Можете ли вы распечатать response.json(), а также ввести (response.json()) и посмотреть, является ли это dict ? Если да, то вы можете просто получить доступ по ключу.

Ответ №1:

Если вы действительно хотите разобрать построчно и убедиться, что вы получаете всю строку, если она соответствует вашей строке, тогда вы можете разделить выводимый текст на новые строки и проверить каждую строку на наличие текста, который вы ищете, например

 r = requests.get("https://artifactory.com",header=(..),verify=False)
lines = r.text.split('n')
for line in lines:
  if 'file_path' in line:
    print(line)
  

Однако, если данные, которые вы получаете обратно, находятся в формате json, который, как я подозреваю, может быть из вашего описания выше, тогда вам обязательно следует воспользоваться форматом json для его обработки вместо разбора построчно. Вы можете сослаться на ключ для file_path в ответе json, например

 r = requests.get("https://artifactory.com",header=(..),verify=False)
data = r.json()
print('file_path: '   data['file_path'])
  

Эти подходы не требуют регулярных выражений. Подход json является лучшим, если вы знаете, что имеете дело с ответами json, а не просто с каким-то текстовым ответом в неизвестном формате.

Комментарии:

1. Я попробовал первый способ, и он работает нормально. Спасибо!

Ответ №2:

попробуйте это,

 #until a newline(n) is hit, consider all characters.
res= re.search(r'file_path[^n] ', response.text)
print(res.group(0))
  

вывод: ‘file_path: /opt/temp’

Комментарии:

1. Спасибо! Я попробую это