Regex 匹配PostgreSQL中的部分反向引用

Regex 匹配PostgreSQL中的部分反向引用,regex,postgresql,backreference,Regex,Postgresql,Backreference,我正在尝试使用regexp\u 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\u 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\u将(“列\u to\u fix”、“\d:”、“\&”、“g”)替换为“已清理”
不会完全这样做,因为每个带有冒号
\d:
的数字键将被括在引号中,而不仅仅是数字。从概念上讲,使用python语法,我想将matched替换为
“\&[-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"}
}

不能按所需方式操作字符串替换模式实体

在替换模式中使用捕获组和对应的反向引用:

regexp_replace("column_to_fix", '([0-9]+):', '"\1":', 'g') as "cleaned"

这里,
([0-9]+):
将捕获组1中的一个或多个数字,一个冒号将被匹配,匹配的数字将被替换为组1中的这些数字,并在双引号内,冒号将被追加到此子字符串。

请尝试
regexp_replace(“column_to_fix”,“([0-9]+):”,“\1:”,“g”)
完美,捕获组,谢谢你,一旦这些被清理了,考虑改变列类型,以利用所有PygReS JSON功能。@ Schwern,这就是计划-谢谢!注意:键周围可能有空格:
(\d+)\s*:
。如果可能的话,它们被签名:
”([+-]\?\d+\s*:”
。最后,这可能会在JSON字符串中匹配,比如
“th3:ree”
。没有简单的解决方案,但要使其成为一个错误,请将结果强制转换为
jsonb
regexp_replace(列“([+-]?\d+)\s*:”,“\1:”,“g”)::jsonb
@Schwern如果OP使用他们的方法(现在是这样)出现问题,则可以进一步调整模式。