【问题标题】:Replace double quotes inside json value using python [duplicate]使用python替换json值内的双引号[重复]
【发布时间】:2018-07-26 19:03:57
【问题描述】:

jsonStr = '{"name": "John"s Garage", "company": "ABC"}'

这是一个字符串 JSON。

需要转换成

'{"name": "John\"s Garage", "company": "ABC"}'

完全去掉双引号

'{"name": "Johns Garage", "company": "ABC"}'

import re
re.sub(r'[a-zA-Z]\"[a-zA-Z]', '', )

这并没有给出想要的结果

【问题讨论】:

  • 这是唯一的例子吗?因为您可以在John"s Garage 上进行搜索和替换。如果这不是唯一的示例,那么您需要更清楚地描述输入的确切内容以及您期望输出的内容。
  • 我不想做 jsonStr.replace('"', '') 因为我有 "name": "John"。那不应该被替换。json 值中只有双引号应该被替换例如:“name”:“John”s”应该变成“name”:“John's”或“name”:“Johns”。这有帮助吗?

标签: python json regex


【解决方案1】:

你可以像这样使用re.sub

re.sub(r'([a-zA-Z])"([a-zA-Z])', r'\1\2', input);

这将保留引号周围的所有字母字符,因此它不会针对带有空格、逗号或冒号的双引号。

我现在看到您尝试了类似的方法。不同之处在于捕获组,并使用r'\1\2' 重新插入它们

【讨论】:

    【解决方案2】:

    re.sub:

    re.sub(r'(:\s+"[^"]*)"(?=[^"]*",)', r'\1', json_str)
    re.sub(r'(:\s+"[^"]*)"(?=[^"]*",)', r'\1\"', json_str)
    
    • (:\s+"[^"]*) 匹配从最后一个: 到第二个" 的部分并放入捕获的组1

    • " 与文字 " 匹配,零宽度正向前瞻 (?=[^"]*",) 确保匹配后紧跟在 , 之前的另一个 "

    • 第一次替换时,只保留捕获的组;并且在第二次捕获的组后面是转义的" 替换

    示例:

    In [163]: json_str = '{"name": "John"s Garage", "company": "ABC"}'
    
    In [164]: re.sub(r'(:\s+"[^"]*)"(?=[^"]*",)', r'\1', json_str)
    Out[164]: '{"name": "Johns Garage", "company": "ABC"}'
    
    In [165]: re.sub(r'(:\s+"[^"]*)"(?=[^"]*",)', r'\1\"', json_str)
    Out[165]: '{"name": "John\\"s Garage", "company": "ABC"}'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多