暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用正则表达式查询-需要帮助

ASKTOM 2019-08-16
425

问题描述

嗨,汤姆

我有一个查询,我试图在给定字符串中替换非空白字符,该字符串可能具有整数或小数与单个空格 (其中非空格存在,示例如下),并且可能存在具有多个或一个空格的字符串 (不必替换一个空格)

没有空格的字符串也需要插入括号内的空格,例如下面的括号 (可以是整数,小数和整列字符串的组合)

例如:-

80.0磅 (50公斤) 应为80.0磅 (50公斤)
102毫米Dia) 应102毫米Dia,并删除 (错字问题)
610毫米应该是610毫米的
<= 356毫米/14in应该 <= 14英寸 (356毫米)

我尝试了以下操作,但不起作用

 SELECT Value as DisplayValue,
     CASE WHEN (TRIM(Value) IS NOT NULL AND
          REGEXP_LIKE(Value,'[(|[][:space:]*[a-zA-Z.-;,=0-9[:space:]]*\s*(\s*MM|IN|IPM|KG|M|LB|EA|FT|DEG|N|FPM|S|LBS\s*)\s*[:space:]*[]|)]','i'))
          THEN REGEXP_REPLACE(EPE.DISPLAYVALUE, '([0-9](MM|IN|IPM|KG|M|LB|EA|FT|DEG|N|FPM|S|LBS)*[-/]\s*[0-9]*[.0-9]*\s*(MM|IN|IPM|KG|M|LB|EA|FT|DEG|N|FPM|S|LBS))','\1 \2')  -- for whitespace sinhMM|IN|IPM|KG|M|LB|EA|FT|DEG|N|FPM|S Square Brackets
         
    FROM Table;
复制


我还有另一个问题,是否可以替换为下面的例子 <= 356毫米/14in到 <= 14英寸 (356毫米) (我在 “英寸” 的大写字母) 与单个空格和括号内的空格格式输出?

专家解答

听起来您正在尝试使用正则表达式修复数据输入错误。这总是不稳定的,因为假阳性和阴性的风险很高。试图用一个巨大的正则表达式修复所有东西是疯狂的肯定方法。

当然,你可以用这样的东西来代替:

select regexp_replace (
         '356mm/14in',
         '([0-9]+)mm.([0-9]+)in',
         '\2 Inch (\1 mm)'
       ) regex
from   dual;

REGEX              
14 Inch (356 mm)  
复制


但你冒着以下风险:

-过于具体,因此您需要编写更多的正则表达式来处理其他不匹配
-太宽了,所以它意外地改变了碰巧匹配的值

最终,您将不得不花费大量时间仔细检查更改; 在某些时候,手动更改数据会更快!
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论