在 PostgreSQL 中匹配部分反向引用
Match partial backreference in PostgreSQL
我正在尝试使用 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"}
}
您无法按照自己的方式操作字符串替换模式实体。
改为使用捕获组并在替换模式中对其进行相应的反向引用:
regexp_replace("column_to_fix", '([0-9]+):', '"":', 'g') as "cleaned"
此处,([0-9]+):
会将一个或多个数字捕获到第 1 组中,并且只匹配一个冒号,匹配项将被替换为第 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"}
}
您无法按照自己的方式操作字符串替换模式实体。
改为使用捕获组并在替换模式中对其进行相应的反向引用:
regexp_replace("column_to_fix", '([0-9]+):', '"":', 'g') as "cleaned"
此处,([0-9]+):
会将一个或多个数字捕获到第 1 组中,并且只匹配一个冒号,匹配项将被替换为第 1 组中双引号和冒号内的这些数字将附加到此子字符串。