проблема с регулярным выражением POSIX на postgresql - PullRequest
0 голосов
/ 30 января 2019

Я хочу удалить все двухбуквенные слова в строке из нескольких слов.

Я придумал это решение:

SELECT regexp_replace('UN DE DA ','\s{1}[A-Z]{2}\s{1}',' ','g');

SELECT regexp_replace('UN DE DA ','^[A-Z]{2}\s{1}',' ','g');

SELECT regexp_replace('UN DE DA','[A-Z]{2}$',' ','g');

НО я хотел бы иметь на одном regexp_replace вместо трех, я проверял это

SELECT regexp_replace('UN DE DA ','\s{1}[A-Z]{2}\s{1}|^[A-Z]{2}\s{1}|[A-Z]{2}$',' ','g');

, но это не такt работа => у меня все еще есть DE

Ваш искренний Loïc

1 Ответ

0 голосов
/ 30 января 2019

Предполагая, что вы действительно хотите удалить двухбуквенные слова, кажется, что ваша замена должна быть пустой строкой, а не одним пробелом.Мы можем попробовать сопоставить с шаблоном:

\y[A-Z]{2}\y

Это будет соответствовать любым двум заглавным буквам, окруженным границами слов, которые включают пробелы или начало / конец строки.

SELECT REGEXP_REPLACE('UN DE DA ', '\y[A-Z]{2}\y', '', 'g');

Демонстрация

Приведенный выше запрос возвращает три пробела, которые остались позади исходной строки.

...