python – 删除引号之间的引号
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 删除引号之间的引号,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2203字,纯文字阅读大概需要4分钟。
内容图文
我有一个json形式的字符串
{"1":"abc"abc"abc","2":"xyz"xyz"xyz"}
但是,如果我想将其转换为json数据,我需要删除“”之间的“”,并获取如下所示的字符串
{"1":"abcabcabc","2":"xyzxyzxyz"}
我尝试使用re.sub来做到这一点,但失败了.任何人都可以帮助我吗?
我的脚本如下:
a='{"1":"abc"de"fg","2":"xyz"xyz"xyz"}'
r = re.compile(r'(?<!\:)(?<=.+)"|(?<!,)"|"(?!}|,)')
b = r.sub('', a)
print(b)
当我运行脚本时,结果如下:
Traceback (most recent call last):
File "./_t1.py", line 5, in <module>
r = re.compile(r'(?<!\:)(?<=.+)"|(?<!,)"|"(?!}|,)')
File "/home/emc/ssd/anaconda3/lib/python3.6/re.py", line 233, in compile
return _compile(pattern, flags)
File "/home/emc/ssd/anaconda3/lib/python3.6/re.py", line 301, in _compile
p = sre_compile.compile(pattern, flags)
File "/home/emc/ssd/anaconda3/lib/python3.6/sre_compile.py", line 566, in compile
code = _code(p, flags)
File "/home/emc/ssd/anaconda3/lib/python3.6/sre_compile.py", line 551, in _code
_compile(code, p.data, flags)
File "/home/emc/ssd/anaconda3/lib/python3.6/sre_compile.py", line 187, in _compile
_compile(code, av, flags)
File "/home/emc/ssd/anaconda3/lib/python3.6/sre_compile.py", line 160, in _compile
raise error("look-behind requires fixed-width pattern")
sre_constants.error: look-behind requires fixed-width pattern
解决方法:
如果你的数据不包含,那么这是有效的,或者:因为我们需要一些锚来解开这个混乱:
import re
a='{"1":"abc"de"fg","2":"xyz"xyz"xyz"}'
b = re.sub('"((?:[^,:]|")*)"',lambda m : '"{}"'.format(m.group(1).replace('"','')),a)
>>> b
'{"1":"abcdefg","2":"xyzxyzxyz"}'
>正则表达式匹配引号之间的字符串,替换函数删除内部引号.
>我们创建一个内部非捕获(?:[^,:] |“)组来表示匹配引号或除逗号和冒号之外的任何内容.
现在b可以解析为json:
>>> import json
>>> json.loads(b)
{'1': 'abcdefg', '2': 'xyzxyzxyz'}
现在如果字符串包含:上面的解决方案不起作用.我们必须适应它:
>根据“:”拆分(可能的空格)
>在拆分列表的所有元素上应用与上面类似的正则表达式(仅删除第一个引号)
>用“:”联接元素
像这样:
import re,json
# a lot of colons in keys & values
a='{"1":"a:bc"de"fg","2:":"xy::z"xyz"xyz"}'
b = '":"'.join(re.sub('((?:[^,:]|")*)"',lambda m : '{}"'.format(m.group(1).replace('"','')),x) for x in re.split('"\s*:\s*"',a))
print(json.loads(b))
正确解析json的结果:
{'1': 'a:bcdefg', '2:': 'xy::zxyzxyz'}
内容总结
以上是互联网集市为您收集整理的python – 删除引号之间的引号全部内容,希望文章能够帮你解决python – 删除引号之间的引号所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。