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 文档,但没有看到明显的选项。这是否需要正则表达式解决方案?
>>> 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 参数。
我不确定你为什么要尝试使用shlex它。重点是分成与 shell 相同的参数。就 shell 而言,这些引号不是参数的一部分。所以,这可能是错误的做法\xe2\x80\xa6
但如果您想这样做,您可以访问解析器的较低级别shlex,这使得这变得微不足道。例如:
>>> 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."\'\nRun Code Online (Sandbox Code Playgroud)\n\n\xc2\xa0 \xc2\xa0 >>> sh.get_token()\n\xc2\xa0 \xc2\xa0 \'\'
\n\n因此,如果您想将其作为list,您可以这样做:
>>> list(iter(shlex.shlex(data).get_token, \'\'))\nRun Code Online (Sandbox Code Playgroud)\n\n我相信这需要 Python 2.3+,但由于您链接到 3.4 的文档,我怀疑这是一个问题。无论如何,我验证了它在 2.7 和 3.3 中都有效。
\n