用于拆分数字和单位的 Oracle 正则表达式

Oracle regexp to split numbers and units

我正在尝试从输入字符串中提取数字和单位。我能够提取数字,但无法提取单位。

WITH smpl AS 
(

    SELECT '8.23 ug/dL' str FROM DUAL UNION
    SELECT 'negative' FROM DUAL UNION
    SELECT '29.2 ' FROM DUAL UNION
    SELECT '0.2 E.U./dL' FROM DUAL UNION
    SELECT '-150 ng/mL' FROM DUAL 
)
SELECT 
    str, 
    regexp_substr(str, '\.*[[:digit:]]+\.*[[:digit:]]*') num
FROM smpl;

期望的输出:

我认为这符合您的要求:

SELECT str, 
       nullif(regexp_replace(str, '(-?[0-9]*\.?[0-9]*) ([^[:digit:]]*)$', ''), str) as num,
       nullif(regexp_replace(str, '(-?[0-9]*\.?[0-9]*) ([^[:digit:]]*)$', ''), str) as unit
FROM smpl;

nullif() 处理没有匹配的情况——返回 NULL 而不是完整的字符串。

Here 是一个 db<>fiddle.