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

时间:2013-12-23 23:28:32

标签: python string split multiline shlex

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

示例输入:

Two Words
"A Multi-line
 comment."

期望的输出:

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我不确定您为什么要尝试使用shlex。重点是将shell分成相同的参数。就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-line\n comment."'

>>> sh.get_token() ''

所以,如果你想把它作为一个list,你可以这样做:

>>> list(iter(shlex.shlex(data).get_token, ''))

我认为这需要Python 2.3+,但是由于你链接到3.4的文档,我怀疑这是一个问题。无论如何,我证实它在2.7和3.3都有效。