Oracle,根据匹配的表达式替换REGEXP_REPLACE的字符串

时间:2017-06-08 08:51:37

标签: regex oracle

我想修复一些使用错误编码上传的数据。 请考虑以下示例:

RUE DE SAN MARTI¦O N¦ 123

我想将¦替换为#,但仅限于数字或字符N

之前的情况

我想要的输出是:

RUE DE SAN MARTI¦O N# 123

我尝试了以下替换:

SELECT REGEXP_REPLACE('RUE DE SAN MARTI¦O N¦ 123','[\d]\¦|[N]\¦','#')
  FROM dual;

正确检测到要匹配的字符,但从我所知的替换字符串用作文字。不过,我想在N之前保留¦。 有没有人有解决类似问题的运气?

1 个答案:

答案 0 :(得分:2)

您可以使用

([0-9N])¦

并替换为\1#

请参阅regex demo

<强>详情:

  • ([0-9N]) - 与数字匹配的捕获组或N(可以用替换模式中的\1反向引用引用)
  • ¦ - 匹配文字符号。

查看Oracle online demo

SELECT REGEXP_REPLACE('RUE DE SAN MARTI¦O N¦ 123','([0-9N])¦','\1#') AS Result FROM dual

enter image description here