Соответствие 2 условиям в regexp_replace в postgres

Мне нужна помощь, чтобы получить правильный синтаксис регулярного выражения в Postgres regexp_replace: Моя строка:

1ABC 2ABC 3DEF 4DEF  

Мои 2 условия совпадения/замены:

 Replace: A OR C but not in front of 2
    or
 Replace: D OR F but not in front of 4

Итак, я ожидаю получить:

"1A;BC; 2ABC; 3D;EF; 4DEF;"

Моя частичная замена для условия 1:

SELECT regexp_replace('1ABC 2ABC 3DEF 4DEF', '((?<!2)(A|C))','\1;','g' );

Моя «Замена» на самом деле является «Вставкой» после совпадающего литерала.

Я просто не могу найти шаблон для 2-го условия, не сломав все это. Это вообще возможно в 1 утверждении?


person user2635921    schedule 24.04.2018    source источник


Ответы (1)


SELECT regexp_replace('1ABC 2ABC 3DEF 4DEF', '((\w*[^2]A|C)|(\w*[^4]D|F))','\1;','g');

Результат: 1A;BC; 2ABC; 3D;EF; 4DEF;

person 404    schedule 24.04.2018
comment
А евротрэш - гений! :-) Спасибо! - person user2635921; 24.04.2018