我需要一个匹配以下行的正则表达式:
{"httpStatus": "OK", "payload": {"status": "OK"}, "httpCode": 200}
但不是
{"httpStatus": "OK", "payload": {"status": "OK", "config": {}}, "httpCode": 200}
所以基本上它应该匹配字符串,如果它不包含 config
要检查字符串是否包含状态,请使用正则表达式:
(?=\"status\": \"OK\")
答案 0 :(得分:3)
使用json
module:
where
答案 1 :(得分:1)
如果您需要使用正则表达式,您可以使用以下基于正面表达式的负面预测:
^((?!"config").)*$
除了@Jerry和@nhahtdh的优秀笔记你可能会注意到这个正则表达式并没有考虑单词的类型,而且我匹配值config
的词典。(你可以看到demo)中的详细信息作为更好的解决方案,您可以使用json
模块。
以下递归函数将为任何嵌套字典执行任务:
>>> def checker(s,val):
... for k in s:
... if k==val:
... return False
... elif isinstance(s[k],dict):
... return checker(s[k],val)
... return True
...
>>>
>>> s="""{"httpStatus": "OK", "payload": {"status": "OK"}, "httpCode": 200}"""
>>> js=json.loads(s)
>>> checker(js,'config')
True
>>> s="""{"httpStatus": "OK", "payload": {"status": "OK", "config": {}}, "httpCode": 200}"""
>>> js=json.loads(s)
>>> checker(js,'config')
False
嵌套字典:
>>> s="""{"httpStatus": "OK", "payload": {"status": "OK", "sts":{"nested":{"config": {}}}}, "httpCode": 200}"""
>>>
>>> js=json.loads(s)
>>> checker(js,'config')
False
答案 2 :(得分:0)
所有其他字段是否必须以完全相同的形式存在,或者它是否足以包含"config"
?
import re
n = str({"httpStatus": "OK", "payload": {"status": "OK", "config": {}}, "httpCode": 200})
print len(re.findall("config", n)) == 0