在Oracle 11g数据库中,使用SQL,我需要从字符串中删除以下特殊字符序列,即
~!@#$%^&*()_+=\{}[]:”;’<,>./?
如果这些字符中的任何一个存在于字符串中,除了这两个字符,我不想删除,即:"|"
和"-"
那么我想他们完全删除。
例如:
从:'ABC(D E+FGH?/IJK LMN~OP'
到:删除特殊字符后的'ABCD EFGHIJK LMNOP'
。
我已经尝试了这个小测试,适用于这个样本,即:
select regexp_replace('abc+de)fg','\+|\)') from dual
但是有没有更好的方法来使用我上面的特殊字符序列,而不用使用Oracle SQL为每个特殊字符执行'\+|\)'
的字符串模式?
7条答案
按热度按时间mtb9vblg1#
可以用空字符串替换字母和空格以外的任何内容
这里是online demo
根据以下评论
我仍然需要在字符串中保留以下两个特殊字符,即“|”和“-”。
只是排除更多
**注意:**连字符
-
应该在开头或结尾,或者像\-
一样转义,因为它在Character类中有特殊的含义来定义范围。有关更多信息,请阅读about Character Classes or Character Sets
f3temu5u2#
请考虑使用以下正则表达式替换:
替换将匹配列表中的任何字符。
这里有一个regex demo!
x4shl7ld3#
匹配特殊字符序列的正则表达式为:
osh3o9ms4#
我觉得你仍然没有转义所有regex特殊字符。要实现这一点,请迭代:构建一个test-tring并开始逐字符构建regex-string,看看它是否删除了你期望删除的字符。如果最新的字符不起作用,你必须转义它。这应该可以做到。
yeotifhr5#
结果:
eufgjt7s6#
您可以使用以下命令:regexp_replace('ABC(D E+FGH?/IJK LMN~ OP','\W')
这种类型的输入在regexp_replace函数中,很容易被'\W'值修改。而且'\w'的输入值可以保留特殊字符并删除(或替换)所有字母字符。
ovfsdjhp7#