无法使用 python match() 解析字符串 - 出现错误 AttributeError: 'NoneType' object has no attribute 'group'

Posted

技术标签:

【中文标题】无法使用 python match() 解析字符串 - 出现错误 AttributeError: \'NoneType\' object has no attribute \'group\'【英文标题】:Unable to parse string using python match() - getting error AttributeError: 'NoneType' object has no attribute 'group'无法使用 python match() 解析字符串 - 出现错误 AttributeError: 'NoneType' object has no attribute 'group' 【发布时间】:2019-01-06 02:41:27 【问题描述】:

我有一本字典,它是 aerospike info 命令的输出。我需要从中解析一个值。

我已将其设置为response 变量的字符串,如下所示。但是,它的类型仍然显示为字典。因此,正如this answer 中所建议的那样,我已将其转储为字符串类型,然后尝试调用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

【问题讨论】:

第一行的变量respone 没有在任何地方使用 【参考方案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 确实需要确保他们得到最后一个具有多个可能匹配项的字符串。 (在这种情况下,单引号不是元字符,因此不需要反斜杠转义。) 仍然领先的.*可能是多余的,不过如果你把它取出来,你需要切换到re.search()而不是re.match()

以上是关于无法使用 python match() 解析字符串 - 出现错误 AttributeError: 'NoneType' object has no attribute 'group'的主要内容,如果未能解决你的问题,请参考以下文章

python正则表达式解析(re)

找不到模块:无法解析'autosuggest-highlight / match'

Python正则表达式解析流

一文搞懂Python中正则表达式

使用 Python re.match 提取字符串

无法在Python中解析时间