python中的正则表达式替换

时间:2016-07-07 08:52:18

标签: python json regex jq

是否有任何方法在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实现这一点

4 个答案:

答案 0 :(得分: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)

但是使用替换

  

替换}, - > }

答案 1 :(得分:0)

这有效:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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