Как удалить специальные символы из строки в postgresql

#postgresql #regexp-replace

#postgresql #регулярное выражение-замена

Вопрос:

Я пытаюсь удалить с помощью REGEXP_REPLACE следующие специальные символы: "[]{}

из следующего текстового поля: [{"x":"y","s":"G_1","cn":"C8"},{"cn":"M2","gn":"G_2","cn":"CA99"},{"c":"ME3","gn":"G_3","c":"CA00"}] и замените их ничем, даже пробелом.

* Излишне говорить, что это всего лишь пример строки, и мне нужно найти согласованное решение для похожих, но разных строк.

Я пытался запустить следующее: SELECT REGEXP_REPLACE('[{"x":"y","s":"G_1","cn":"C8"},{"cn":"M2","gn":"G_2","cn":"CA99"},{"c":"ME3","gn":"G_3","c":"CA00"}] ','[{[}]":]','')

Но получил практически ту же строку..

Заранее спасибо!

Комментарии:

1. Это выглядит как текст в формате JSON. Почему вы хотите удалить структуру из этого?

Ответ №1:

Вам нужно экранировать специальные символы ( ) и указать, что вы хотите повторить операцию для каждого символа ( 'g' ), иначе она остановится при 1-м совпадении

  SELECT REGEXP_REPLACE(
    '[{"x":"y","s":"G_1","cn":"C8"},{"cn":"M2","gn":"G_2","cn":"CA99"},{"c":"ME3","gn":"G_3","c":"CA00"}] ',
     '[{[}]":]',
     '',
     'g');
                  regexp_replace
--------------------------------------------------
 xy,sG_1,cnC8,cnM2,gnG_2,cnCA99,cME3,gnG_3,cCA00
(1 row)
  

Комментарии:

1. ps: вопрос требует удаления []{} , и ваш пример также удаляется :" , поэтому я последовал вашему примеру..

2. Привет, JGH, большое вам спасибо за вашу помощь, но, как вы упомянули в своем комментарии, мне нужно продолжать : (что означает, что приведенный мной пример неверен), требуемый результат должен быть следующим: x: y, s: G_1, cn: C8, cn: M2,gn: G_2, cn: CA99,c: ME3,gn: G_3,c: CA00

3. @TalSibony таким образом, вы можете удалить : из regex_replace 2-й аргумент ( '[{[}]"]' )

4. Owww нет, я вижу, что для этого требуется только удаление : из второго аргумента в вашем решении, большое спасибо!