Python实现通用文本查询解析为字典的方法
解析带引号的键值对文本为Python字典
这里提供两种实用方法来实现需求,能正确处理引号内包含空格的文本:
方法一:使用shlex模块(推荐)
Python的shlex模块专门用于处理类shell的字符串分割,能自动识别引号包裹的内容,完美解决空格问题:
import shlex # 原始查询文本 query = 'first_name:Jon last_name:"Doe" address:"1st X street, Y, California"' parsed_dict = {} # 用shlex.split分割,自动处理引号内的空格 for item in shlex.split(query): # 按第一个冒号拆分键和值(避免值里有冒号时出错) key, value = item.split(':', 1) parsed_dict[key] = value print(parsed_dict)
运行结果:
{'first_name': 'Jon', 'last_name': 'Doe', 'address': '1st X street, Y, California'}
这个方法的优势是:
- 自动处理单/双引号包裹的内容
- 支持值中包含转义引号(比如
message:"He said \"Hi!\"") - 无需手动处理复杂的字符串边界情况
方法二:使用正则表达式
如果需要自定义匹配规则,可以用正则表达式匹配键值对:
import re query = 'first_name:Jon last_name:"Doe" address:"1st X street, Y, California"' # 正则模式:匹配键(字母数字下划线),然后冒号,然后要么是引号包裹的内容,要么是非空白字符 pattern = r'(\w+):(".*?"|\S+)' matches = re.findall(pattern, query) parsed_dict = {} for key, value in matches: # 去掉值两端的引号(如果存在) if value.startswith('"') and value.endswith('"'): parsed_dict[key] = value[1:-1] else: parsed_dict[key] = value print(parsed_dict)
注意:这个正则默认不处理转义引号,如果需要支持转义,需要调整模式为r'(\w+):("(?:\\.|[^"])*"|\S+)',但复杂度会提升,此时shlex模块依然是更省心的选择。
内容的提问来源于stack exchange,提问作者bihiyeb974
相关产品推荐
相关产品推荐

