PostgreSQL中使用regex_replace提取DATA相关内容的技术求助
解决方案
原始数据集
1. '{SHEET,2730377,SHEET,5708283,DATA,3015937}' 2. '{SHEET,2730377,SHEET,5708283,DATA,3015937,DATA,0010965}' 3. '{SHEET,5708283,DATA,3015937,DATA,0010965}' 4. '{SHEET,5708283,DATA,3015937}'
期望结果
1. {DATA,3015937} 2. {DATA,3015937,DATA,0010965} 3. {DATA,3015937,DATA,0010965} 4. {DATA,3015937}
问题分析
你之前的正则仅替换了第一个匹配的SHEET,7位数字,,且未覆盖末尾无逗号的SHEET,7位数字场景,导致残留未替换内容。
正确正则表达式方案
使用带全局替换标志的正则,匹配所有SHEET,7位数字(无论后面是逗号还是紧跟闭合大括号):
regexp_replace(your_column, 'SHEET,\d{7}(?:,|(?=}))', '', 'g')
正则说明
SHEET,\d{7}:精准匹配"SHEET,"后接7位数字的固定格式(?:,|(?=})):非捕获组,匹配数字后的逗号,或数字后紧跟闭合大括号的情况(正向前瞻,不消耗}字符)'g':全局替换标志(PostgreSQL中需显式指定,确保替换所有匹配项)
效果验证
对每条原始数据应用该语句后,会精准移除所有SHEET相关片段,完整保留所有DATA,7位数字的内容,完全符合期望结果。
内容的提问来源于stack exchange,提问作者Jim Macaulay
相关产品推荐
相关产品推荐

