2

从某处接收一个字符串,该字符串是一系列参数。参数由空格分隔。任务是将字符串解析为参数列表,所有参数都是字符串类型。

例如:

input : "3 45 5.5 a bc"
output : ["3","45","5.5","a","bc"]

如果需要传输包含空格的字符串,则事情变得有点复杂,用于"引用。

input: "3 45 5.5 \"This is a sentence.\" bc"
output: ["3","45","5.5","This is a sentence.","bc"]

但是,如果句子恰好包含引号怎么办?使用转义字符:\"-> ", \\->\

input: "3 45 5.5 \"\\\"Yes\\\\No?\\\" it said.\" bc"
output: ['3','45','5.5','"Yes\\NO?" it said.','bc']

python是否有一种优雅的方式来完成这项工作?

PS。我不认为正则表达式可以解决这个问题。

4

1 回答 1

8

使用shlex.split()功能

>>> import shlex
>>> shlex.split("3 45 5.5 a bc")
['3', '45', '5.5', 'a', 'bc']
>>> shlex.split("3 45 5.5 \"This is a sentence.\" bc")
['3', '45', '5.5', 'This is a sentence.', 'bc']
>>> shlex.split("3 45 5.5 \"\\\"Yes\\\\No?\\\" it said.\" bc")
['3', '45', '5.5', '"Yes\\No?" it said.', 'bc']

shlex.shlex您可以使用function创建一个可自定义的解析器,然后通过设置其属性来改变它的行为。例如,您可以将.whitespace属性设置', \t\r\n'为允许逗号分隔单词。然后只需将shlex实例转换回列表以拆分输入。

于 2012-08-28T06:23:21.990 回答