正则表达式 REGEXP_SUBSTR 拆分为列

regex REGEXP_SUBSTR split into the columns

你能帮我写一个正则表达式来将字符串拆分成列吗?

输入:

select REGEXP_SUBSTR ('/D 1/D 18/15/1000', xxxx)  from dual ;

select REGEXP_SUBSTR ('/D 1/D 18/15', xxxx)   from dual ;

输出:

col1>D 1<  col2 >D 18< col3 >15<  col4>1000<

col1>D 1< col2>D 18< col3>15<

结果应带列。所以这意味着我想分成几列。

REGEXP_SUBSTR returns 字符串 subject 中与正则表达式 pattern 匹配的部分。您可以使用 REGEXP_REPLACE,这将允许您使用正则表达式模式匹配将字符串中的一系列字符替换为另一组字符。

select REGEXP_REPLACE ('/D 1/D 18/15/1000', '\/(\w+)', '')  from dual ;

要获得您期望的输出,您不需要使用正则表达式。您可以使用简单的 REPLACE/ 替换为 space,然后 trim 字符串末尾的任何 space。

SQL> SELECT TRIM (REPLACE ('/D 1/D 18/15/1000', '/', ' ')) AS sample_data FROM DUAL;


        SAMPLE_DATA
___________________
D 1 D 18 15 1000


SQL> SELECT TRIM (REPLACE ('/D 1/D 18/15', '/', ' ')) AS sample_data FROM DUAL;


   SAMPLE_DATA
______________
D 1 D 18 15

更新

根据评论中的信息,这些值应分为单独的列。下面的正则表达式可用于通过使用 / 作为分隔符进行拆分来获取不同的值。

SQL> WITH sample_data AS (SELECT '/D 1/D 18/15/1000' AS sample_col FROM DUAL)
  2  SELECT regexp_substr(sample_col, '[^/]+',1,1) as col1,
  3         regexp_substr(sample_col, '[^/]+',1,2) as col2,
  4         regexp_substr(sample_col, '[^/]+',1,3) as col3,
  5         regexp_substr(sample_col, '[^/]+',1,4) as col4,
  6         regexp_substr(sample_col, '[^/]+',1,5) as col5
  7    FROM sample_data;


   COL1    COL2    COL3    COL4    COL5
_______ _______ _______ _______ _______
D 1     D 18    15      1000


SQL> WITH sample_data AS (SELECT '/D 1/D 18/15' AS sample_col FROM DUAL)
  2  SELECT regexp_substr(sample_col, '[^/]+',1,1) as col1,
  3         regexp_substr(sample_col, '[^/]+',1,2) as col2,
  4         regexp_substr(sample_col, '[^/]+',1,3) as col3,
  5         regexp_substr(sample_col, '[^/]+',1,4) as col4,
  6         regexp_substr(sample_col, '[^/]+',1,5) as col5
  7    FROM sample_data;


   COL1    COL2    COL3    COL4    COL5
_______ _______ _______ _______ _______
D 1     D 18    15