У меня есть словарь, который выводит команду аэрокосмической информации. Мне нужно проанализировать значение из него.
Я установил его как строку для переменной response
как показано ниже. Однако этот тип по-прежнему отображается как словарь. Итак, как было предложено в этом ответе, я сбросил его на строковый тип, а затем попытался вызвать match()
(потому что он ожидает строковый параметр). Тем не менее, я все еще получаю эту ошибку.
respone = "{'BB912E94CDE0B0E': (None, 'n_objects=179:n-bytes-memory=0:stop-writes-count=0:set-enable-xdr=use-default:disable-eviction=true:set-delete=false;\n')}"
p = "/.*\'n_objects=([0-9]+)\:.*/gm"
stringResponse = json.dumps(response)
print type(response)
print stringResponse
print type(stringResponse)
print re.match(p,stringResponse).group(1)
Выход -
<type 'dict'>
{"BB912E94CDE0B0E": [null, "n_objects=179:n-bytes-memory=0:stop-writes-count=0:set-enable-xdr=use-default:disable-eviction=true:set-delete=false;\n"]}
<type 'str'>
Traceback (most recent call last):
File "Sandeepan-oauth_token_cache_complete_sanity_cp.py", line 104, in <module>
print re.match(p,stringResponse).group(1)
AttributeError: 'NoneType' object has no attribute 'group'
Я получаю желаемый результат с использованием той же строки и шаблона регулярного выражения - https://regex101.com/r/ymotqe/1
Вам нужно исправить свой узор. Часть /gm
в конце соответствует флагам для регулярного выражения. Некоторые другие вещи '/'
также не нужны.
import json
import re
# fixed variable name
response = "{'BB912E94CDE0B0E': (None, 'n_objects=179:n-bytes-memory=0:stop-writes-count=0:set-enable-xdr=use-default:disable-eviction=true:set-delete=false;\n')}"
# fixed pattern
p = ".*'n_objects=([0-9]+):.*"
stringResponse = json.dumps(response)
print stringResponse
print type(response)
# fixed flags parameter (but you do not need it in your example)
print re.match(p,stringResponse, flags=re.M).group(1)
Выход:
"{'BB912E94CDE0B0E': (None, 'n_objects=179:n-bytes-memory=0:stop-writes-count=0:set-enable-xdr=use-default:disable-eviction=true:set-delete=false;\n')}"
<type 'str'>
179
При использовании regex101.com вы также должны переключиться на режим python
.
r"'n_objects
если только пример не является неправильным, и OP действительно должен убедиться, что они получают последний из строки с несколькими возможными совпадениями. (В этом контексте одинарная кавычка не является метасимволом, поэтому не нуждается в обратном слэше.)
respone
в первой строке нигде не используется