【问题标题】:Get value inbetween underscores at a certain occurance在特定事件中获取下划线之间的值
【发布时间】:2021-06-01 02:36:17
【问题描述】:

我试图在某次出现时获得两个下划线之间的值。

例如:

HOL_1026-03_OW_01.9000_01.3400_0.2800_CL_32, 0"_0, 0"_0, 0"_RR_NORM_CR-HSR_CR-SUP_ALLHOL-013_FCNO_NOFIN_VRA-010_HXHHH_.

我正在尝试从中提取 "CR-HSR""CR-SUP"。我最初想出了这个

(?!(.*?_){8}).*(?=(.*?_){7}) and  (?!(.*?_){7}).*(?=(.*?_){6})

适用于 regexr.com

我在 PL/SQL 中使用它,当我运行 REGEXP_SUBSTR() 方法时,它返回 null。

【问题讨论】:

  • 你的意思是你需要同时从字符串中提取两个值吗?

标签: regex plsql


【解决方案1】:

如果没有环视,您可以重复匹配不是_ 的组,然后再匹配它。

^([^_]+_){12}([^_]+)

然后获取捕获组 2 的值。

SELECT regexp_substr('HOL_1026-03_OW_01.9000_01.3400_0.2800_CL_32, 0"_0, 0"_0, 0"_RR_NORM_CR-HSR_CR-SUP_ALLHOL-013_FCNO_NOFIN_VRA-010_HXHHH_.', '^([^_]+_){12}([^_]+)', 1,1,NULL,2) from dual;

输出

CR-HSR

要匹配CR-SUP,您可以将量词从{12} 更改为{13}

作为替代方案,也可能是更短的方式

REGEXP_SUBSTR(c, '[^_]+', 1, 13)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多