1

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"}
}
4

1 回答 1

1

您不能以您想要的方式操作字符串替换模式实体。

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

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

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

于 2019-07-17T21:11:17.263 回答