Postgres中提取文件名后路径并去除首个斜杠/的方法求助
解决方案
可以通过调整正则表达式直接提取目标内容,或者在原有查询结果基础上去除开头斜杠,两种方法都能适配filename后有无斜杠的场景:
方法1:简化正则直接提取
直接在substring的正则中匹配filename后的内容,自动忽略开头的可选斜杠:
select lower(substring('ksh $sample/wrapper.sh --filename /abc/test/svc_test_abc_card.yaml' from 'filename\s*(?:/)?([^ ]+)'));
正则说明:
filename\s*:匹配filename及后面的任意空白字符(?:/)?:非捕获组,匹配可选的单个斜杠([^ ]+):捕获组,提取斜杠(或直接)后面的所有非空白字符,即最终目标内容
方法2:在原有结果上去除斜杠
基于你原有的查询逻辑,用regexp_replace去掉结果开头的斜杠:
select lower(regexp_replace(substring(split_part('ksh $sample/wrapper.sh --filename /abc/test/svc_test_abc_card.yaml', 'filename', 2) from '[^ ]+'), '^/', '', ''));
说明:
regexp_replace(..., '^/', '', ''):匹配字符串开头的斜杠并替换为空,若开头无斜杠则不做修改
两种方法测试后,均会返回期望结果:abc/test/svc_test_abc_card.yaml。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

