Соответствие 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 заявлении?

1 ответ

Решение

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

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

Другие вопросы по тегам