Использование регулярных выражений для извлечения данных из ответа JSON в Python - PullRequest
3 голосов
/ 13 мая 2019

Я пытаюсь извлечь строку из ответа JSON, используя регулярное выражение в Python, но безуспешно.

{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}

Я пытаюсь получить

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA=== 

из строки. Однако | в строке не позволит мне использовать методы, которые я видел в переполнении стека, потому что в нем по-прежнему отсутствует |. Буду признателен за любую помощь.

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Нет необходимости заново изобретать json.loads() с помощью регулярных выражений. Выполните синтаксический анализ строки JSON в словаре с помощью json.loads() и получите доступ к интересующей вас строке, проиндексировав ее в словаре. После того, как вы извлекли строку, разделите символ канала и получите доступ к третьему индексу списка:

your_json_dict_name["ao"][0].split("|")[3]

Вот полный пример:

import json

raw_json_str = r'{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'
json_dict = json.loads(raw_json_str)

print(json_dict["ao"][0].split("|")[3])

Выход:

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===
1 голос
/ 13 мая 2019

здесь, вы можете экранировать специальные символы внутри класса символов:

import re
text = '{"ao":["jskl|_xx2|020|b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===|true|900"]}'


match = re.search(r'[|]b.*===[|]', text).group()[1:-1]
print(match)

выход:

b503414ff19853ce357413fafe7c612a0b6b0ba3f592f9b551bdc8d0dbdbbd34:J26U1IfsvZ0kiJwLm3xoVhZNN/Xr+Z2gRkJA===
0 голосов
/ 13 мая 2019

Хорошо, для начала я не совсем понимаю, почему вы не используете json.loads в этой строке, так что вы можете сослаться на этот json как на карту и перейти к клавише «ao» и использовать регулярное выражение для строк внутри массив.

Но если оставить это в стороне, если вы все еще хотите извлечь данные из json в виде строки, вы можете использовать группы регулярных выражений и некоторые экранирующие символы ("\") в "|" характер.

Что бы выглядеть примерно так:

.

1007 * [\ "? ( \ |.?) {3} (.?) \ |.

Тогда вы можете получить доступ к группе 2 и получить желаемый результат Предполагая, что JSON всегда выглядит одинаково

Если ваш массив в свойстве "ao" имеет более 1 строки, это не получит второе значение. Поэтому я предлагаю предварительно преобразовать эту строку в карту, а затем зациклить каждую строку самостоятельно.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...