Oracle 替换一些重复的字符(非数字)

Posted

技术标签:

【中文标题】Oracle 替换一些重复的字符(非数字)【英文标题】:Oracle replace some duplicated characters (non digits ) 【发布时间】:2021-02-21 14:45:28 【问题描述】:

任何人都可以帮助我为 regexp_replace 构建正确的语法,以从字符串中删除任何相乘的非数字和非字母?如果数字/字母相乘 - 它不会改变 例如。 来源和预期结果:

'ABBC000001223,  ABC00000212,,, '
'ABBC000001223, ABC00000212, '   

(删除逗号和第二个和第三个逗号后出现的第二个空格)

【问题讨论】:

【参考方案1】:

使用此REGEXP_REPLACE 匹配第一组中的任何非字母数字字符

 ([^[:alnum:]])

后跟一个或多个相同的字符(第 1 组)

 ([^[:alnum:]])(\1)+

并将其替换为原始字符(第 1 组)

我添加了一些其他数据来演示结果

with dta as (
select 'ABBC000001223,  ABC00000212,,, ' txt from dual union all
select ',.,;,;;;;,,,,,,,,,,,,#''++`´' txt from dual union all
select 'ABBC000001223ABC00000212' txt from dual)
select txt,
regexp_replace(txt,'([^[:alnum:]])(\1)+', '\1') result
from dta
 

TXT
-------------------------------
RESULT
--------------------------------
ABBC000001223,  ABC00000212,,,  
ABBC000001223, ABC00000212,     
,.,;,;;;;,,,,,,,,,,,,#'++`´     
,.,;,;,#'+`´

ABBC000001223ABC00000212        
ABBC000001223ABC00000212 

【讨论】:

以上是关于Oracle 替换一些重复的字符(非数字)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 10g 中的聚合字符串连接 [重复]

无重复全排列_非递归实现

熊猫遍历行以查看值是不是为字母数字[重复]

字符串中的数字以“非数字”或错误形式出现 - Python [重复]

如何对oracle sql中的数字字符串进行数学比较[重复]

Java字符串去掉重复字符