Oracle中使用REGEXP_SUBSTR提取文件名指定内容遇阻求助
提取文件名中目标字符串的正则解决方案
你的原正则表达式REGEXP_SUBSTR('L8_P0_TOPSIDE12_AA-MPS-K-PCE.JPG', 'TOPSIDE\d+_[.]' )无法得到预期结果,原因是该正则匹配的是TOPSIDE[数字]_.这样的片段,但目标字符串AA-MPS-K-PCE位于TOPSIDE12_之后、.JPG之前,原正则完全没覆盖到这部分内容。
正确的正则写法
针对你的需求,有两种可靠的实现方式:
方式一:精准匹配TOPSIDE后的目标段
利用捕获组提取TOPSIDE\d+_之后、.之前的内容,Oracle中可以指定捕获组序号来获取结果:
REGEXP_SUBSTR('L8_P0_TOPSIDE12_AA-MPS-K-PCE.JPG', 'TOPSIDE\d+_([^.]+)', 1, 1, NULL, 1)
- 正则解析:
TOPSIDE\d+_:匹配固定前缀TOPSIDE+任意数字+下划线([^.]+):捕获组,匹配所有非.的字符(即目标字符串)- 最后一个参数
1表示返回第一个捕获组的内容
方式二:匹配最后一组下划线到后缀前的内容
如果文件名格式固定为[前缀]_[目标].[后缀],也可以直接提取最后一个下划线到.之间的内容:
REGEXP_SUBSTR('L8_P0_TOPSIDE12_AA-MPS-K-PCE.JPG', '_(.+)\\.JPG', 1, 1, NULL, 1)
- 正则解析:
_(.+)\\.JPG:匹配下划线+任意字符+.JPG,捕获组提取中间的目标字符串
以上两种写法执行后,都会返回预期的AA-MPS-K-PCE。
内容的提问来源于stack exchange,提问作者Filota
相关产品推荐
相关产品推荐

