【问题标题】:Oracle, replace string for REGEXP_REPLACE based on the matched expressionOracle,根据匹配的表达式替换 REGEXP_REPLACE 的字符串
【发布时间】:2017-06-08 23:24:54
【问题描述】:

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

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。 有没有人幸运地解决了类似的问题?

【问题讨论】:

    标签: regex oracle


    【解决方案1】:

    你可以使用

    ([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
    

    【讨论】:

    • 正则表达式从来不是我的强项,非常感谢。它就像一种魅力!
    猜你喜欢
    • 2013-10-24
    • 2019-01-30
    • 2022-11-23
    • 2019-03-16
    • 2021-12-29
    • 2012-09-25
    • 2018-08-29
    • 2012-01-25
    • 2011-09-02
    相关资源
    最近更新 更多