Oracle,根据匹配的表达式替换REGEXP\u replace的字符串

Oracle,根据匹配的表达式替换REGEXP\u replace的字符串,regex,oracle,Regex,Oracle,我想修复一些使用错误编码上传的数据。 考虑下面的例子: RUE DE SAN MARTI¦O N¦ 123 我想用say#替换,但仅在前面有数字或字符N 我期望的输出是: RUE DE SAN MARTI¦O N# 123 我尝试了以下替换: SELECT REGEXP_REPLACE('RUE DE SAN MARTI¦O N¦ 123','[\d]\¦|[N]\¦','#') FROM dual; 它正确地检测要匹配的字符,但据我所知,替换字符串用作文本。但是,我想在之前保留N。

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

RUE DE SAN MARTI¦O N¦ 123
我想用say
#
替换
,但仅在前面有数字或字符
N

我期望的输出是:

RUE DE SAN MARTI¦O N# 123
我尝试了以下替换:

SELECT REGEXP_REPLACE('RUE DE SAN MARTI¦O N¦ 123','[\d]\¦|[N]\¦','#')
  FROM dual;
它正确地检测要匹配的字符,但据我所知,替换字符串用作文本。但是,我想在
之前保留
N
。 有人解决过类似问题吗?

您可以使用

([0-9N])¦
并替换为
\1

详细信息

  • ([0-9N])
    -与数字或
    N
    匹配的捕获组(可通过替换模式中的
    \1
    反向引用进行引用)
  • -匹配文字符号
见:


正则表达式从来都不是我的强项,非常感谢。这是一种魅力!
SELECT REGEXP_REPLACE('RUE DE SAN MARTI¦O N¦ 123','([0-9N])¦','\1#') AS Result FROM dual