PostgreSQL如何提取冒号与右方括号间的不定长度数据
解决方法
针对你遇到的提取结果带右括号的问题,这里提供几种实用的处理方式:
精准正则提取(推荐)
修改SUBSTRING的正则表达式,直接只提取到右括号前的内容,避免后续处理:SUBSTRING(table.field from 'LOCTN\s*:\s*([^\]]+)') AS test说明:
\s*匹配任意数量的空格(适配LOCTN与冒号、冒号与内容间的空格变化),[^\]]+表示匹配所有非右括号的字符,完美截取目标内容。对已有结果做后处理
如果想保留你原来的split类方法,可以在结果中去掉末尾的右括号:- 用TRIM专门去除末尾的
]:TRIM(TRAILING ']' FROM split_part(wa.fx, ':', 2)) AS SUB1 - 用regexp_replace替换掉结果中的
](适合仅末尾有该符号的场景):regexp_replace((regexp_split_to_array(wa.fx, ':'::text))[2], ']', '', 'g') AS STUFF
- 用TRIM专门去除末尾的
优化原正则写法
如果你想沿用最初的SUBSTRING思路,调整正则的捕获组即可:SUBSTRING(table.field from '[LOCTN] : ([^\]]+)') AS test把原来的
.*?[^|:]]+改成[^\]]+,精准排除右括号。
内容的提问来源于stack exchange,提问作者LApd2024
相关产品推荐
相关产品推荐

