Как игнорировать указанный c набор слов или символов из поиска по шаблону в Postgres - PullRequest
0 голосов
/ 18 июня 2020

У меня есть следующая таблица в Postgres 11.

col1
BI Placebo
BI 10773 Placebo
AMG 386 Placebo
Eflornithine or Placebo
Sulindac;Placebo
Sulindac plus Placebo
Vehicle Controlled Placebo

Я хотел бы получить те строки, в которых есть c набор пропущенных слов и специальных символов, а в строке 1 или более до и после выкройки. Желаемый результат:

col1
BI Placebo
BI 10773 Placebo
AMG 386 Placebo
Vehicle Controlled Placebo

Я попытался выполнить следующий запрос, чтобы выполнить это:

select * from table where col1 ~* '^(?!or|;|+|plus)\w\s\w\sPlacebo$' or col1 ~* '^(?!or|;|+|plus)\w\sPlacebo$'

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

1 Ответ

2 голосов
/ 18 июня 2020

Если вы разрешаете сопоставление только символа слова, вы можете опустить сопоставление ; и + из чередования. Обратите внимание, что вам нужно экранировать плюс \+ или добавить оба к классу символов [;+]

Вы можете проверить, что строка не содержит или и плюс с использованием отрицательного просмотра вперед (?!.*(?:or|plus))

Затем сопоставьте символы из 1+ слов, используя \w+, за которым следует, необязательно, сопоставьте пробел и символы из 1+ слов.

Затем сопоставьте Placebo в конце строки.

^(?!.*(?:or|plus))\w+(?: \w+)? Placebo$

Regex demo | Postgresql демо

Например

select * from table where col1 ~* '^(?!.*(?:or|plus))\w+(?: \w+)? Placebo$'

Вывод

col1

BI Placebo
BI 10773 Placebo
AMG 386 Placebo
Vehicle Controlled Placebo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...