我是oracle正则表达式的初学者。我有以下字符串
'Critical fix ;,DI 2.2.1 new fixes , DI 2.2.2 maintenance plan , DI 3.2.1 new patch'
从上面的字符串我想使用regexp_substr获得如下输出。
DI 2.2.1,DI 2.2.2,DI 3.2.1
有问题的字符串可以有多次出现(DI x.x.x)并使用正则表达式它应该返回一个命令分隔字符串,如输出中所述。 请帮忙
答案 0 :(得分:1)
可能的解决方案:
select regexp_replace(B, '(.*DI\s\S+)(,.*$)', '\1')
from
(
select regexp_replace(A, '(.*?)(DI\s\S+)', '\2,') B
from
(
select 'Critical fix ;,DI 2.2.1 new fixes , DI 2.2.2 maintenance plan , DI 3.2.1 new patch' A
from dual
)
)
首先在regexp_replace(A, '(.*?)(DI\s\S+)', '\2,') B
的帮助下,我们会移除大部分非DI\s\S+
文字,并在每个DI...
阻止后添加逗号。
DI 2.2.1,DI 2.2.2,DI 3.2.1, new patch
其次,在regexp_replace(B, '(.*DI\s\S+)(,.*$)', '\1')
的帮助下,我们删除了最后一个逗号和尾随文本。
DI 2.2.1,DI 2.2.2,DI 3.2.1
答案 1 :(得分:0)
正如评论者所说,你所尝试过的一个例子会有所帮助。嗯,这是我能够根据你的问题得到的。
使用此模式DI \ s \ S +
在此处查看演示https://regex101.com/r/kO2cZ1/4。
为了能够检测所有事件,请确保使用/ m。它使您能够匹配字符串中的所有匹配项。