我有一个字典,它是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
获得所需的输出答案 0 :(得分: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
模式。