PostgreSQL如何通过正则仅移除紧跟字母后的数字0
实现方法
你之前的写法没有加匹配约束,会替换字符串中所有的0。要实现仅删除字母后紧跟的0,用正则捕获组匹配对应结构即可,核心是保留匹配到的字母,只删除紧跟的0。
正确的SQL语句:
SELECT regexp_replace('g06, f03, k090', '([a-zA-Z])0', '$1')
规则说明
- 正则参数
([a-zA-Z])0的匹配逻辑:([a-zA-Z])是第一个捕获组,匹配任意单个英文字母- 后续的
0限定只匹配紧跟在字母后的数字0,其他位置的0不会被命中
- 替换值
$1代表引用第一个捕获组匹配到的内容,也就是把「字母+0」的匹配结果替换成字母本身,等价于删掉字母后面的那个0
效果验证
- 对测试串
g06, f03, k090执行后,g0替换为g、f0替换为f、k0替换为k,最终输出g6, f3, k90,完全符合预期 - 单独测试你示例里的
k090串,执行后返回k90,串末尾的0因为前面是数字9,不属于字母后紧跟的0,会被完整保留 - 如果你的数据库环境不支持
$1的捕获组引用格式,把替换值换成\\1即可适配。
内容的提问来源于stack exchange,提问作者inmemoryofer
相关产品推荐
相关产品推荐

