如何仅拆分字符串指定位置字符,将SQL键值对转换为Python字典
实现SQL格式字符串转字典的方案
核心思路
用正则表达式直接匹配完整的键值对,避开引号内逗号的干扰:正则会优先匹配被双引号包裹的字符串值、以及数字类型值,不会被值内部的逗号打断匹配。
完整实现代码
import re import ast def sql_str_to_dict(sql_str): # 正则匹配键值对:组1匹配字段名,组2匹配值(双引号包裹的内容/整数/浮点数) pattern = r'(\w+)\s*=\s*(".*?"|\d+\.?\d*)' matches = re.findall(pattern, sql_str) res = {} for key, raw_val in matches: # 处理值的类型转换 if raw_val.startswith('"') and raw_val.endswith('"'): # 去掉两端引号,直接取字符串内容 val = raw_val[1:-1] else: # 数字类型自动转换,兼容整数、浮点数 val = ast.literal_eval(raw_val) res[key] = val return res
测试效果
普通场景测试
输入:'field_1="value_1", field_2=1234'
输出:{'field_1': 'value_1', 'field_2': 1234}
值内带逗号场景测试
输入:'field_1="value_1a, value_1b", field_2=1234'
输出:{'field_1': 'value_1a, value_1b', 'field_2': 1234}
适配说明
- 正则中的
\s*兼容等号两侧、逗号后有无空格的场景 - 匹配字符串时用
.*?非贪婪规则,确保只会匹配到当前值的结束引号,不会跨值匹配 ast.literal_eval做数字类型转换,比手动判断类型更安全,也支持浮点数转换
内容的提问来源于stack exchange,提问作者Jossy
相关产品推荐
相关产品推荐

