首页 > 解决方案 > 在 Python 中使用带引号的值解析名称-值对

问题描述

我需要解析名称-值对的字符串。这些值可以是带引号的字符串,大概是因为它们的值可以包含分隔符。例子:

Path="/5E13F93E/5E142BAA" Ref="U4"  Part="1"

更有趣的例子:

Path="/5E13F93E= 5E14 2BAA" Ref="U4"  Part="1"

在 Python 中有没有标准的方法来做到这一点?我无法想象在 2020 年为此编写自己的字符级解析器,但我无法立即在标准库中找到任何这样做的东西。

标签: pythonparsing

解决方案


假设这应该是一系列 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\"


推荐阅读