【问题标题】:handling __ scenarios with regex使用正则表达式处理 __ 场景
【发布时间】:2013-11-16 05:02:49
【问题描述】:

我有类似的数据

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

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

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

请就此向我提出建议。

谢谢!!

【问题讨论】:

    标签: regex oracle plsql oracle11g


    【解决方案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
          )
    

    【讨论】:

    • 是的,我可以使用 substr 和 instr,但正则表达式看起来很简单。我正在使用 regexp_extract。
    • 对不起,我不明白。 this不是你想要的吗?
    • 用这个 '([^]*)', 1, 3 我得到了准确的输出但是用_。得到的输出就像 _ROS 和 _BN。所以我不需要_
    • @Dileep 您必须再添加两个参数:NULL 和 1,就像在 Ramblin' Man 的示例中一样。
    • regexp_substr 有第 6 个参数 subexpr,它只提取正则表达式的一部分。这就是我将 [^_]* 括在括号中并将 1 用作子表达式的原因。
    【解决方案2】:

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

    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
    ---- ----
    BN BN 

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2011-09-14
      相关资源
      最近更新 更多