如何使用 Python 的 shlex 拆分字符串,同时保留 shlex 拆分的引号字符?
样本输入:
Two Words
"A Multi-line
comment."
期望的输出:
['Two', 'Words', '"A Multi-line\ncomment."']
注意包裹多行字符串的双引号。我通读了shlex 文档,但没有看到明显的选项。这需要正则表达式解决方案吗?
>>> print(s)
Two Words
"A Multi-line
comment."
>>> shlex.split(s)
['Two', 'Words', 'A Multi-line\n comment.']
>>> shlex.split(s, posix=False)
['Two', 'Words', '"A Multi-line\n comment."']
>>>
在 2.6 版更改: 添加了 posix 参数。
我不确定您为什么要尝试使用shlex
它。重点是拆分为与 shell 相同的参数。就外壳而言,这些引号不是论点的一部分。所以,这可能是错误的做法……</p>
但是如果你想这样做,你可以访问shlex
解析器的较低级别,这使得这变得微不足道。例如:
>>> data = '''Two Words
"A Multi-line
comment."'''
>>> sh = shlex.shlex(data)
>>> sh.get_token()
'Two'
>>> sh.get_token()
'Words'
>>> sh.get_token()
'"A Multi-line\n comment."'
>>> sh.get_token() ''
所以,如果你想把它作为一个list
,你可以这样做:
>>> list(iter(shlex.shlex(data).get_token, ''))
我相信这需要 Python 2.3+,但是由于您链接到 3.4 的文档,我怀疑这是一个问题。无论如何,我验证它在 2.7 和 3.3 中都有效。