使用 shlex 拆分多行字符串并保留引号字符


如何使用 Python 的 shlex

拆分字符串,同时保留 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 中都有效。

相关内容

  • 没有找到相关文章

最新更新