REGEXP_REPLACE用于名称和姓氏屏蔽

时间:2017-11-03 10:55:05

标签: sql regex oracle

select REGEXP_REPLACE('Tina Frederich Piedro', '\w+', '*') from table;

我正在使用\w+,但它会返回* * *预期输出的真正正则表达式是什么?

输入

Tina Frederich Piedro

预期产出;

T*** F******** P*****

3 个答案:

答案 0 :(得分:2)

这不是一般解决方案,但它可能适用于您的情况。您可以使用'*' s替换小写字母:

select REGEXP_REPLACE('Tina Frederich Piedro', '[a-z]', '*', 1, 0, 'c')

'c'用于区分大小写的替换。

答案 1 :(得分:1)

我绝不是正则表达式专家,我不得不将答案分成两个阶段。我想更有能力的人可以将这两个步骤结合起来。但是这样做可以解决名称或标点符号中间的大写字母,例如O' Brian。

select
     regexp_replace(lowers_done,'\*[A-Z]','**') first_letters_only
from

(
select
    regexp_replace('Tina McDonald O''Brian','[a-z]|[[:punct:]]','*') lowers_done
from
    dual
)

输出:

T *** M ******* O ******

答案 2 :(得分:0)

如果出于安全原因,您可以使用DBMS_REDACT包对敏感信息应用屏蔽模式。文档为here

我知道它不是一个正则表达式解决方案,而且此功能可能会受到oracle的额外许可,但Oracle建议采用符合PCI标准的敏感数据解决方案。