正则表达式子字符串不在字符串中

时间:2015-04-29 08:39:20

标签: python regex

我需要一个匹配以下行的正则表达式:

{"httpStatus": "OK", "payload": {"status": "OK"}, "httpCode": 200}

但不是

{"httpStatus": "OK", "payload": {"status": "OK", "config": {}}, "httpCode": 200}

所以基本上它应该匹配字符串,如果它不包含 config

要检查字符串是否包含状态,请使用正则表达式:

(?=\"status\": \"OK\")

3 个答案:

答案 0 :(得分:3)

使用json module

将输入解析为JSON
where

答案 1 :(得分:1)

如果您需要使用正则表达式,您可以使用以下基于正面表达式的负面预测:

^((?!"config").)*$

Demo

除了@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