Невозможно проанализировать строку с помощью python match () - получена ошибка AttributeError: у объекта 'NoneType' нет атрибута 'группа'

1

У меня есть словарь, который выводит команду аэрокосмической информации. Мне нужно проанализировать значение из него.

Я установил его как строку для переменной 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

  • 0
    переменная respone в первой строке нигде не используется
Теги:

1 ответ

2
Лучший ответ

Вам нужно исправить свой узор. Часть /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.

  • 1
    Начальная косая черта, по-видимому, также является частью недоразумения. Регулярное выражение, вероятно, должно просто начинаться с r"'n_objects если только пример не является неправильным, и OP действительно должен убедиться, что они получают последний из строки с несколькими возможными совпадениями. (В этом контексте одинарная кавычка не является метасимволом, поэтому не нуждается в обратном слэше.)
  • 0
    @tripleee - спасибо, пропустил этот
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню