拆分字符串,同时保留 shlex 拆分的引号字符?
示例输入:
Two Words
"A Multi-line
comment."
期望输出:
['Two', 'Words', '"A Multi-linencomment."']
请注意将多行字符串换行的双引号。我通读了shlex文档,但我没有看到一个明显的选择。这是否需要正则表达式解决方案?
>>> print(s)
Two Words
"A Multi-line
comment."
>>> shlex.split(s)
['Two', 'Words', 'A Multi-linen comment.']
>>> shlex.split(s, posix=False)
['Two', 'Words', '"A Multi-linen comment."']
>>>
在 2.6 版更改: 添加了 posix 参数。
我不确定你为什么要为此使用shlex
。重点是拆分为与 shell 相同的参数。就外壳而言,这些引号不是论点的一部分。所以,这可能是错误的做法...
但是如果你想这样做,你可以访问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-linen comment."'
>>> sh.get_token() ''
所以,如果你想把它作为一个list
,你可以做这个单行:
>>> list(iter(shlex.shlex(data).get_token, ''))
我相信这需要 Python 2.3+,但由于您链接到 3.4 中的文档,我怀疑这是一个问题。无论如何,我验证了它在 2.7 和 3.3 中都有效。