繁体   English   中英

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

[英]remove a substring from a string from a specific position 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中实现吗?

如果您真的真的需要自己处理这一行(而不是像@ yohann.marineau在注释中建议的那样,不使用专用库将其解析为JSON),则可以尝试一些正则表达式好东西:

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倍. 表示任何符号*表示零次或多次 ,括号用于标记组。

您有一个类似于 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}'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM