最好的pythonic方式来解析param字符串?

时间:2012-08-28 06:09:09

标签: python string parsing

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

例如:

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。我不认为正则表达式可以解决这个问题。

1 个答案:

答案 0 :(得分:8)

使用shlex.split() function

>>> 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实例转换回列表即可拆分输入。