我正在尝试使用regexp_replace
函数清理格式错误的JSON字符串。我有一个类似以下的字符串:
{ 0: {"foo": "bar", "baz": "24/05/2016", "qux": "12"},
1: {"foo": "bar", "baz": "04/11/2015", "qux": "13"},
2: {"foo": "bar", "baz": "25/07/2016", "qux": "14"}
}
为了使这个有效的JSON,我需要将数字键括在双引号中。我不想捕获每个嵌套对象中的现有数字数据。
我最初以为使用反向引用,匹配那些后跟冒号的数字,但是捕获的反向引用当然包含冒号,我不想用引号引起来。
regexp_replace("column_to_fix", '\d:', '"\&"', 'g') as "cleaned"
不太会这样做,因为每个带有冒号\d:
的数字键都将用引号引起来,而不是仅用数字引起来。从概念上讲,我想使用python语法替换为"\&[-1]"
。是否可以获取反向引用的子字符串?
我正在努力的结果是:
{ "0": {"foo": "bar", "baz": "24/05/2016", "qux": "12"},
"1": {"foo": "bar", "baz": "04/11/2015", "qux": "13"},
"2": {"foo": "bar", "baz": "25/07/2016", "qux": "14"}
}
答案 0 :(得分:1)
您无法以所需的方式操作字符串替换模式实体。
改为使用捕获组,并在替换模式中使用对应的反向引用:
regexp_replace("column_to_fix", '([0-9]+):', '"\1":', 'g') as "cleaned"
在这里,([0-9]+):
将捕获一个或多个数字到组1中,并且冒号将被匹配,并且匹配项将被替换为第1组中的双引号内的这些数字,并且冒号是附加到此子字符串。