Python正则表达式排除特定字符串:移除SQL中逗号至AS间内容
解决SQL正则替换问题:移除逗号与AS之间的内容
问题分析
你之前的正则表达式r",\s*COUNT\(\*\)\s*AS\s*\w+"会把逗号、COUNT(*) AS和别名一起删除,这就导致结果里丢失了需要保留的, volume,自然不符合预期。你的需求是保留逗号和AS后的别名,只删掉逗号到AS之间的表达式部分。
正确正则写法
使用非贪婪匹配来精准定位逗号到AS之间的内容,替换后保留逗号和空格以衔接后续别名:
import re text = """Select customer_name, customer_type, COUNT(*) AS volume FROM table GROUP BY customer_name, customer_type ORDER BY volume DESC LIMIT 10""" result = re.sub(r",\s*.+?\s*AS\s*", ", ", text) print(result)
正则规则说明
,\s*:匹配目标逗号及其后面的任意空白字符.+?:非贪婪模式匹配任意字符,避免误匹配到SQL中其他位置的AS关键字\s*AS\s*:匹配AS关键字及其前后的任意空白字符- 替换为
,:保留逗号和空格,直接衔接AS后面的别名
场景扩展
如果需要处理跨行的SQL代码(比如逗号和AS不在同一行),可以添加re.DOTALL标志让.匹配换行符:
result = re.sub(r",\s*.+?\s*AS\s*", ", ", text, flags=re.DOTALL)
内容的提问来源于stack exchange,提问作者Kevin Nash
相关产品推荐
相关产品推荐

