Oracle: фильтр специальных символов за некоторыми исключениями. - PullRequest
1 голос
/ 05 мая 2020

Мне нужна быстрая помощь.

Я хочу отфильтровать входную строку и удалить специальные символы, кроме пробела (), точки (.), Запятой (,), дефиса (-), амперсанда (&) и апостроф (').

Я использую ниже, но он фильтрует все, кроме точки (.) и запятой (,).

SELECT REGEXP_REPLACE('*Bruce*-*Martha*-&-*Thomas%* *Wyane''s* *Enterprises* ([#Pvt,Ltd.])', '[^0-9A-Za-z,.'' ]', '')  
FROM dual;

Строка ввода: *Bruce*-*Martha*-&-*Thomas%* *Wyane's* *Enterprises* ([#Pvt,Ltd.])

Что я ожидаю: Bruce-Martha-&-Thomas Wyane's Enterprises Pvt,Ltd.

Что я получаю: BruceMarthaThomas Wyane's Enterprises Pvt,Ltd.

Спасибо.

1 Ответ

1 голос
/ 05 мая 2020

Вы можете использовать

SELECT REGEXP_REPLACE('*Bruce*-*Martha*-&-*Thomas%* *Wyane''s* *Enterprises* ([#Pvt,Ltd.])', '[^&0-9A-Za-z,.'' -]+', '') FROM dual

См. Демонстрацию regex

Шаблон [^&0-9A-Za-z,.'' -]+ будет соответствовать одному или нескольким вхождениям любого символа, кроме &, Буква ASCII, di git, запятая, точка, одинарный апостроф, пробел и дефис.

Для поддержки любых пробелов замените буквальный пробел на [:space:]:

'[^&0-9A-Za-z,.''[:space:]-]+'
...