6

如何使用 Python 的 shlex 拆分字符串,同时保留 shlex 拆分的引号字符?

样本输入:

Two Words
"A Multi-line
 comment."

期望的输出:

['Two', 'Words', '"A Multi-line\ncomment."']

注意包裹多行字符串的双引号。我通读了shlex 文档,但没有看到明显的选项。这需要正则表达式解决方案吗?

4

2 回答 2

7
>>> 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 参数。

于 2016-03-10T09:23:00.510 回答
3

我不确定您为什么要尝试使用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 中都有效。

于 2013-12-23T23:36:46.907 回答