像Split函数一样使用REGEXP_SUBSTR

时间:2012-03-13 15:10:48

标签: regex oracle10g

我需要从VARCHAR2列中的数据中提取文本值。样品:

EDKES^Visit: ^PRIMARY INSURANCE COMMENTS: ^SECONDARY INSURANCE COMMENTS: ^TERTIARY INSURANCE COMMENTS: ^NO PRIMARY INSURANCE^NONE^NONE^NONE^NONE^NONE^NONE^NONE^NONE^NONE^NO SECONDARY INSURANCE^NONE^NONE^NONE^NONE^NONE^NONE^NONE^NONE^NONE^NO TERTIARY INS*

我需要获得第6次出现'^'的文本(不包括'^')。在此示例中,文本为NO PRIMARY INSURANCE

([\w\s\:\*]+(\^?))主要有效,但不排除'^'。

当我尝试使用此表达式REGEXP_SUBSTR(VARCHAR_COL, '([\w\s\:\*]+(\^?))', 1, 6)时,我得到一个字符('s'),而不是预期的匹配NO PRIMARY INSURANCE^

我错过了什么?

2 个答案:

答案 0 :(得分:1)

这应该可以很好地运作:

REPLACE(REGEXP_SUBSTR(VARCHAR_COL, '[^^]+\^?', 1, 6), '^', '')

答案 1 :(得分:1)

您也可以考虑空白列。如果发动机只返回
捕获组,它将修剪分隔符。

([^^]*).?

这当然意味着找到的最后一列始终无效。