Oracle:特殊字符过滤器,少数例外

Oracle: Special characters filter with few exceptions

我需要一些快速帮助。

我想过滤输入字符串并删除除 space( )、句点(.)、逗号(,)、连字符(-)、和号(&) 和撇号(') 之外的特殊字符。

我在下面使用,但它过滤掉了除句点 (.) 和逗号 (,) 之外的所有内容。

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.

谢谢。

您可以使用

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

regex demo

[^&0-9A-Za-z,.'' -]+ 模式将匹配除 &、ASCII 字母、数字、逗号、点、单撇号、space 和连字符之外的任何字符的一次或多次出现。

要支持任何白色space,请将文字 space 替换为 [:space:]:

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