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

时间:2016-11-19 21:26:25

标签: python

我有一个像下面的字符串(它实际上是一个嵌套的json),

{"":" X"" B":1," C":"的 { "":" X"" b":1," C":" {"&#34 ;:" X"" b":1," C":" XA"}"} & #34;}

我试图提取字符串的特定部分(粗体文本)。而且," 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&# 34;:" X"" b":1," C":" {"":" x"," b":1," c":" xa"}"},否则它不会有效json对象,我不能在字符串上使用json.loads。

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

2 个答案:

答案 0 :(得分:0)

如果你真的真的需要自己处理这一行(而不是用@ yohann.marineau在评论中建议的专用库将其解析为JSON),你可以尝试一些regular expressions好东西:

[^"]

此处"表示任何符号,但{9} .表示正好9次*表示< em>任何符号,{{1}}表示零次或多次,括号用于标记组。

答案 1 :(得分:0)

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

>>> 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.dumps(json_data['c'])
'{"a": "x", "c": {"a": "x", "c": "xa", "b": 1}, "b": 1}'