我试图使用REGEXP_REPLACE来替换/删除第一个连字符和后续3个字符

时间:2017-08-10 22:55:45

标签: regex oracle

我正在尝试使用REGEXP_REPLACE来替换/删除第一个连字符和3个后续字符。输入表的长度不固定且有所不同。我想提出一份工作快递

5F9B9C7F-ABC-40F4
CODE-AXF 2014 CODE
ADSHLHSALK

预期结果应为

5F9B9C7F-ABC-40F4   ==> 5F9B9C7F-40F4
CODE-AXF-2014 CODE  ==> CODE- 2014 CODE
ADSHLHSALK          ==> ADSHLHSALK

查询:

SELECT text, column   
REGEXP_REPLACE( text,'[-]',NULL )
FROM TABLE
where column=  '5';  

2 个答案:

答案 0 :(得分:1)

您可以使用

REGEXP_REPLACE('5F9B9C7F-ABC-40F4','^([^-]*)-.{3}','\1')

如果您的意思是3 字母,请将.替换为[a-zA-Z]

<强>详情

  • ^ - 字符串开头
  • ([^-]*) - 第1组:除-
  • 以外的任何0 +字符
  • - - 连字符
  • .{3} - 任意3个字符(或[a-zA-Z]{3}将匹配3个ASCII字母)。

查看online demo打印

enter image description here

答案 1 :(得分:1)

您不需要正则表达式:

SELECT text,
       column,
       SUBSTR( text, 1, pos - 1 ) || SUBSTR( text, pos + 4 )
FROM   (
  SELECT text,
         column,
         INSTR( text, '-' ) AS pos
  FROM   TABLE
  WHERE  column = '5'
);