select REGEXP_REPLACE('Tina Frederich Piedro', '\w+', '*') from table;
我正在使用\w+
,但它会返回* * *
预期输出的真正正则表达式是什么?
输入
Tina Frederich Piedro
预期产出;
T*** F******** P*****
答案 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标准的敏感数据解决方案。