我正在尝试在字符串中添加逗号和空格。以下是一些示例:
{大象:1,FENNEC_FOX:1NAKED_MOLE:1URCHIN:2}
{DUNG_BEETLE:12URCHIN:1}
{DUNG_BEETLE:1FENNEC_FOX:1URCHIN:2}
注意不一致地缺少“,”。我希望结果是
{大象:1、FENNEC_FOX:1、NAKED_MOLE:1、海胆:2}
{DUNG_BEETLE:1,海胆:1}
{DUNG_BEETLE:1、FENNEC_FOX:1、URCHIN:2}
我想我需要使用
REGEXP_REPLACE(my_string, ':[0-9]+[a-z_A-Z]', replacement)
。但我不太确定如何使 replacement
成为冒号,无论数字是什么,逗号和空格,以及匹配的字母是什么。
您的正则表达式很好,尽管您可以通过使用
\d
代替 [0-9]
和 \w
代替 [a-z_A-Z]
来简化它。然后,您需要使用捕获组来保存匹配的文本并将其插入到替换字符串中:
SELECT REGEXP_REPLACE(my_string, '(:\d+)(\w)', '\1, \2', 'g')
FROM my_table
输出:
{ELEPHANT:1, FENNEC_FOX:1, NAKED_MOLE:1, URCHIN:2}
{DUNG_BEETLE:12, URCHIN:1}
{DUNG_BEETLE:1, FENNEC_FOX:1, URCHIN:2}
如果您尝试将其转换为有效的 JSON,则需要第二步将键括在双引号中:
SELECT REGEXP_REPLACE(REGEXP_REPLACE(my_string, '(:\d+)(\w)', '\1, \2', 'g'), '(\w+):', '"\1":', 'g')
FROM my_table
输出:
{"ELEPHANT":1, "FENNEC_FOX":1, "NAKED_MOLE":1, "URCHIN":2}
{"DUNG_BEETLE":12, "URCHIN":1}
{"DUNG_BEETLE":1, "FENNEC_FOX":1, "URCHIN":2}
上进行演示