删除/替换特殊字符,例外

Posted

技术标签:

【中文标题】删除/替换特殊字符,例外【英文标题】:Remove / Replace special characters, with exception 【发布时间】:2021-08-09 01:16:52 【问题描述】:

我有一个字符串,我想删除所有特殊字符,包括空格。除了,如果它存在于字符串中,我想留下冒号。

我正在使用它,它有点工作,但似乎没有替换括号、反斜杠或破折号......

TRIM(REGEXP_REPLACE(REPLACE(REGEXP_REPLACE(c.category_name,'[^:^0-9A-Za-z ]',''),' : ','|'), '\s+', '_', 'g'))

请指教

【问题讨论】:

外部REGEXP_REPLACETRIM 与这个问题有什么相关性?这个问题不就是REGEXP_REPLACE(c.category_name,'[^:^0-9A-Za-z ]','')吗? 【参考方案1】:

您可以将冒号添加到允许的字符列表中

[^0-9A-Za-z:]:任何不是数字、字母或冒号的东西。'g':根据需要多次应用替换(否则它会在第一次停止)

select REGEXP_REPLACE('0.1[2]?ab cd:ef g&*(h)/ij;','[^0-9A-Za-z:]','','g');
 regexp_replace
----------------
 012abcd:efghij

【讨论】:

非常感谢大家。其中多个似乎正在工作!非常感谢。【参考方案2】:

您缺少 'g' ("global") 标志,因此只有 第一个 不需要的字符被删除(替换为空白)。

变化:

REGEXP_REPLACE(c.category_name, '[^:^0-9A-Za-z ]', '')

到:

REGEXP_REPLACE(c.category_name, '[^:0-9A-Za-z ]', '', 'g')

注意:我从正则表达式中删除了多余的 ^,但如果您也想保留 ^ 字符,请将其保留。

【讨论】:

以上是关于删除/替换特殊字符,例外的主要内容,如果未能解决你的问题,请参考以下文章

如何删除/替换字符串列中的一系列特殊字符? [关闭]

使用 SSIS 从列中删除特殊字符 " 和 '

如何使用正则表达式替换替换特殊字符?

如何替换字符串中的特殊字符?

如何替换除-(破折号)以外的特殊字符

从R中的字符串中删除所有特殊字符?