1

我有类似的数据

BR_TheDailyBeast.com__ROS_BN_DT_ROS Leaderboard_SUB_728x90
BR_CNET_ROS_BN_DT_Cnet reviewsAddedValueMid-pageMPU_SUB_300x250

O/P # BN 和 BN

实际 O/P # ROS 和 BN

我需要在第三和第四个下划线之间提取。当我使用 ' 时[^_]+',1,4,它可以正确提取,但是无论在哪里,__它都在处理单个下划线。

我应该如何处理这些情况以及解析逻辑。

请就此向我提出建议。

谢谢!!

4

2 回答 2

1

你可以使用这个。

regexp_substr(your_string, '_([^_]*)', 1, 3, null, 1)

您也可以简单地使用普通的 substr 和 instr 函数。

substr(your_string, 
       instr(your_string,'_',1,3) + 1,
       instr(your_string,'_',1,4) - instr(your_string,'_',1,3) - 1
      )
于 2013-11-05T11:02:03.273 回答
0

你可以试试这个解决方案:

SELECT
  regexp_substr('BR_TheDailyBeast.com__ROS_BN_DT_ROS Leaderboard_SUB_728x90', '_+([^_]*)', 1, 3, NULL, 1) AS val1,
  regexp_substr('BR_CNET_ROS_BN_DT_Cnet reviewsAddedValueMid-pageMPU_SUB_300x250', '_+([^_]*)', 1, 3, NULL, 1) AS val2
FROM dual;

输出:

VAL1 VAL2
---- ----
国阵   
于 2013-11-05T11:00:38.173 回答