python - 在 Python 中使用带引号的值解析名称-值对
问题描述
我需要解析名称-值对的字符串。这些值可以是带引号的字符串,大概是因为它们的值可以包含分隔符。例子:
Path="/5E13F93E/5E142BAA" Ref="U4" Part="1"
更有趣的例子:
Path="/5E13F93E= 5E14 2BAA" Ref="U4" Part="1"
在 Python 中有没有标准的方法来做到这一点?我无法想象在 2020 年为此编写自己的字符级解析器,但我无法立即在标准库中找到任何这样做的东西。
解决方案
假设这应该是一系列 POSIX 变量赋值,您可以使用该shlex
模块:
>>> import shlex
>>> list(shlex.shlex('Path="/5E13F93E= 5E14 2BAA" Ref="U4" Part="1"'))
['Path', '=', '"/5E13F93E= 5E14 2BAA"', 'Ref', '=', '"U4"', 'Part', '=', '"1"']
您必须自己从值中删除外部引号,但这可能会有些棘手。前导引号很容易识别:如果值的第一个字符是"
or '
,则将其删除。但是,如果最后一个值是引号,则需要先检查它是否被转义(例如,foo=bar\"
推荐阅读
- html - 复选框与输入框的高度不同 - Bootstrap
- excel - 图表图例中的 Excel 加号/减号
- vue.js - 编写一个 JEST 测试 VUE 3,Apollo
- flutter - Flutter如何使用rxdart检查提交时文本字段是否为空
- python - 如何在处理数十亿个条目的数组时提高 Python 中的内存使用率?
- jupyter-notebook - 如何在 jupyter notebook 中从 Github 运行这个特定的项目
- c# - 验证字符串是否为空或为空
- mongodb - 我需要在 mongodb 中使用查找和匹配聚合函数进行左反连接
- linear-programming - 如何禁用 Cplex 中的所有分支和绑定改进?
- azure-cognitive-search - Azure 认知搜索可用性和区域/数据中心节点重置/重新启动