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

Pet*_*ron 6 python string split multiline shlex

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

样本输入:

Two Words
"A Multi-line
 comment."
Run Code Online (Sandbox Code Playgroud)

期望输出:

['Two', 'Words', '"A Multi-line\ncomment."']
Run Code Online (Sandbox Code Playgroud)

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

kxr*_*kxr 6

>>> 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."']
>>> 
Run Code Online (Sandbox Code Playgroud)

在 2.6 版更改: 添加了 posix 参数。


aba*_*ert 3

我不确定你为什么要尝试使用shlex它。重点是分成与 shell 相同的参数。就 shell 而言,这些引号不是参数的一部分。所以,这可能是错误的做法\xe2\x80\xa6

\n\n

但如果您想这样做,您可以访问解析器的较低级别shlex,这使得这变得微不足道。例如:

\n\n
>>> data = \'\'\'Two Words\n"A Multi-line\n comment."\'\'\'\n>>> sh = shlex.shlex(data)\n>>> sh.get_token()\n\'Two\'\n>>> sh.get_token()\n\'Words\'\n>>> sh.get_token()\n\'"A Multi-line\\n comment."\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xc2\xa0 \xc2\xa0 >>> sh.get_token()\n\xc2\xa0 \xc2\xa0 \'\'

\n\n

因此,如果您想将其作为list,您可以这样做:

\n\n
>>> list(iter(shlex.shlex(data).get_token, \'\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我相信这需要 Python 2.3+,但由于您链接到 3.4 的文档,我怀疑这是一个问题。无论如何,我验证了它在 2.7 和 3.3 中都有效。

\n