【问题标题】:Regular expression in python replacepython替换中的正则表达式
【发布时间】:2016-07-07 08:52:18
【问题描述】:

有没有办法在python中使用正则表达式来替换花括号{之后出现的所有,(逗号)

文件中的数据格式如下 - abc.json

{
"Key1":"value1",
"Key2":"value2"
},

{
"Key1":"value3",
"Key2":"value4"
},

{
"Key1":"value5",
"Key2":"value6"
}

这应该导致以下 -

{
"Key1":"value1",
"Key2":"value2"
}

{
"Key1":"value3",
"Key2":"value4"
}

{
"Key1":"value5",
"Key2":"value6"
}

如您所见,,(逗号)已在每个大括号 } 之后被删除。

如果除了 python REGEX 之外,这也可以通过 jq 实现,那将会很有帮助

【问题讨论】:

  • 如果你使用python,你可以使用lookbehind (?<=}),

标签: python json regex jq


【解决方案1】:

测试来源:https://regex101.com/r/wT6uU2/1

import re
p = re.compile(ur'},')
test_str = u"{\n\"Key1\":\"value1\",\n\"Key2\":\"value2\"\n},\n\n{\n\"Key1\":\"value3\",\n\"Key2\":\"value4\"\n},\n\n{\n\"Key1\":\"value5\",\n\"Key2\":\"value6\"\n}"

re.findall(p, test_str)

但是用替换代替

替换 },-> }

【讨论】:

    【解决方案2】:

    这行得通:

    import re
    
    s="""{
    "Key1":"value1",
    "Key2":"value2"
    },
    
    {
    "Key1":"value3",
    "Key2":"value4"
    },
    
    {
    "Key1":"value5",
    "Key2":"value6"
    }"""
    
    pattern=re.compile(r'(?P<data>{.*?}),', re.S)
    
    print pattern.findall(s)
    
    s1=pattern.sub(r'\g<data>', s)
    print s1
    

    【讨论】:

      【解决方案3】:

      如果您打算在 jq 中处理生成的 JSON,将其包裹在括号 [{...}, {...}] 中以使其成为 JSON 数组可能更容易。然后,您可以在 jq 中使用.[] 来解包数组。

      【讨论】:

        【解决方案4】:

        在考虑其他选项之前,您真的应该返回生成该文件的源并确保它实际输出 valid json。

        也就是说,您可以使用 JQ 将内容作为原始字符串操作以添加括号,然后将其解析为数组以便它们吐出内容。

        $ jq -Rs '"[\(.)]" | fromjson[]' abc.json
        

        【讨论】:

          猜你喜欢
          • 2012-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-29
          相关资源
          最近更新 更多