You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle正则表达式提取问题:多NO.场景结果不符合预期

Oracle正则表达式提取"NO."后子串的解决方案

要解决提取所有"NO."后子串并在多匹配时用" - "连接的问题,可通过嵌套正则替换实现:

with test (id, col) as (
  select 1, 'JOHN NO.10A 1234 TEST1'  from dual union all
  select 2, 'JOHN NO.10 1234 TEST1'  from dual union all
  select 3, 'JOHN NO.10A 1234 TEST1'  from dual union all
  select 4, 'JOHN NO.10A TEST1 - JOHN NO.20A TEST2'      from dual union all
  select 5, 'JOHN NO.10 TEST1 - JOHN NO.20 TEST2'      from dual union all
  select 6, 'JOHN NO.10A TEST1234'  from dual union all
  select 7, 'JOHN 10A TEST1234'   from dual
)
select
  id,
  col,
  nullif(
    trim(
      regexp_replace(
        regexp_replace(col, '.*?(NO\.(\S+))|.', '\2 ', 1, 0, 'i'),
        '\s+', ' - '
      )
    ), ''
  ) as expected
from test;

逻辑说明

  • 第一层regexp_replace:遍历字符串,捕获所有NO.后的非空白子串,其余内容替换为空格
  • 第二层regexp_replace:将连续空格替换为-,实现多匹配结果的连接
  • trim:清理首尾多余空格
  • nullif:将无匹配时的空字符串转为Null
  • 'i'参数:忽略大小写,兼容NO./no.等写法

输出结果

IDCOLEXPECTED
1JOHN NO.10A 1234 TEST110A
2JOHN NO.10 1234 TEST110
3JOHN NO.10A 1234 TEST110A
4JOHN NO.10A TEST1 - JOHN NO.20A TEST210A - 20A
5JOHN NO.10 TEST1 - JOHN NO.20 TEST210 - 20
6JOHN NO.10A TEST123410A
7JOHN 10A TEST1234Null

内容的提问来源于stack exchange,提问作者kishore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:35:18