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

如何从冒号分隔的键值字符串生成适配空格、引号场景的Python字典

解决方案

问题原因

你遇到的报错核心是shlex.split仅处理了引号包裹的空格,无法识别未被引号包裹的值的边界:值的结束边界是下一个键的起始标识[键名]:,拆分后的列表会出现大量不带冒号的值片段,直接按token拆分冒号会出现长度为1的元素,不符合字典构造要求。

实现代码

直接用正则匹配所有符合规则的键值对即可,兼容你提到的所有场景:

import re

def tokenize(msg):
    # 正则规则:匹配键+冒号,后跟两种格式的值
    pattern = r'([^:\s]+):\s*(?:"([^"]*)"|(.*?))(?=\s+[^:\s]+:|$)'
    result = {}
    for match in re.finditer(pattern, msg):
        key = match.group(1)
        # 优先取引号包裹的值,否则取非引号格式的值并去掉两端空白
        value = match.group(2) if match.group(2) is not None else match.group(3).strip()
        result[key] = value
    return result

效果验证

使用你的测试用例运行:

>>> msg = 'key1: "this is value1 "   key2:this is value2 key3: this is value3'
>>> tokenize(msg)
{'key1': 'this is value1 ', 'key2': 'this is value2', 'key3': 'this is value3'}

兼容场景说明

  • 自动忽略键和值之间的任意数量空白字符
  • 支持双引号包裹的带空格的值,保留引号内的所有内容(包括两端空白)
  • 支持未被引号包裹的带空格的值,自动截取到下一个键之前的所有内容
  • 支持值本身不带空格的基础格式

内容的提问来源于stack exchange,提问作者pythonRcpp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:01