来自文本的Regexp_like

时间:2020-04-14 10:06:15

标签: sql regex oracle

我总是在正则表达式方面遇到麻烦:

所以我用listagg进行了查询:

输出:

21.09.2017 09:43  Status 8-2#Partner 0-178#EXP_date 24-2#EXP_interval 30-365#Partner_code template-0925584#amount 0-70#

21.11.2019 08:10  Status 8-2#Partner 0-178#EXP_date 24-0#EXP_interval 30-1#Partner_code template-0925805#

17.12.2019 10:23  Status 5-1#

我需要用值Status1#2#来对这个“文本”进行正则表达式

regexp_like(my_column,'Status (1#|2#)')

所以我想要所有同时存在Status AND ('1#' OR '2#')的行。

regexp_like的正确格式是什么?

3 个答案:

答案 0 :(得分:2)

您可以将|的{​​{3}}缩短为alternation

在状态后匹配空格,然后使用.*来匹配1#或2#

Status .*[12]#

character class

答案 1 :(得分:1)

考虑:

regexp_like(my_column,'Status .*(1|2)#')

您原来的正则表达式的问题在于,它在'1#'之后正等待'2#''Status '。添加'.*'允许两者之间的任何字符序列。

答案 2 :(得分:1)

如果要捕获到第一个#,请使用.+?,否则使用.*作为最后一个#

Status.+?(1|2)#

正则演示: Screenshot here

说明:

.+?与任何字符匹配(行终止符除外)

+?量词-在 1 unlimited 次之间匹配,次数很少 时间,并根据需要进行扩展(惰性