从特定位置的字符串中移除子字符串

2024-10-04 15:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的字符串(它实际上是一个嵌套的json)

{“a”:“x”,“b”:1,“c”:“{”a”:“x”,“b”:1,“c”:“{”a”:“x”,“b”:1,“c”:“xa”}“}

我试图提取字符串的特定部分(粗体文本)。而且,“xa”可以是另一个嵌套的json对象。你知道吗

所以,条件总是我需要在第9次出现“(引号字符)之后直到最后一次出现”之前提取字符串的部分。你知道吗

我试过这个

newstr = '{"a":"x","b":1,"c":"{"a":"x","b":1,"c":"{"a":"x","b":1,"c":"xa"}"}"}'
newstr2=newstr.split('"')[9:]+newstr.rsplit('"')[1:]
newstr3 = ''.join(newstr2)
print(newstr3)

它给了我字符串中的子字符串,但是,由于我将字符串拆分为'''所有''''从整个字符串中删除。所以,我得到的结果是这样-{a:x,b:1,c:{a:x,b:1,c:xa}},我需要像-{“a”:“x”,“b”:1,“c”:“{”a”:“x”,“b”:1,“c”:“xa”}这样的子字符串,否则它将不是有效的json对象,我无法使用json.loads文件在绳子上。你知道吗

我记得以前在其他编程语言、VB甚至Oracle存储过程中这样做过,基本上我使用了substr和instr函数的组合。你知道如何在python中实现这一点吗?你知道吗


Tags: 对象字符串文本json条件字符引号split
2条回答

您有一个类似于字符串的JSON。我没有说JSON字符串,因为您的嵌套元素包含"{}",这使得JSON格式无效。为了将其转换为有效的JSON格式,需要分别用{}替换它们。然后您可以使用^{}模块来实现您想要的。要将json字符串转换为dict/list,可以使用^{}示例如下:

>>> import json
>>> json_string = json_string.replace('"{', '{').replace('}"', '}')
>>> json_data = json.loads(json_string)   # convert JSON string to python object
>>> json_data['c']   # content of `c` key in `json_data` dict
{u'a': u'x', u'c': {u'a': u'x', u'c': u'xa', u'b': 1}, u'b': 1}

如果您再次希望此数据为字符串格式,可以使用^{}作为:

>>> json.dumps(json_data['c'])
'{"a": "x", "c": {"a": "x", "c": "xa", "b": 1}, "b": 1}'

如果您真的需要自己处理这行代码(而不是使用专用库将其解析为JSON)@约汉·马里诺你可以尝试一些regular expressions好东西:

import re
s = '{"a":"x","b":1,"c":"{"a":"x","b":1,"c":"{"a":"x","b":1,"c":"xa"}"}"}'
m = re.search(r'([^"]*"){9}(.*)"', s)
print(m.group(2))

这里[^"]表示任何符号,但"{9}表示正好9次.表示任何符号*表示零次或多次,括号用于标记组。你知道吗

相关问题 更多 >

    热门问题