You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 01:15:11