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.shlexfunctionを使用してカスタマイズ可能なパーサーを作成し、属性を設定してその動作を変更できます。たとえば、.whitespace属性を', \t\r\n'に設定して、コンマで単語を区切ることもできます。次に、shlexインスタンスをリストに変換して入力を分割します。

于 2012-08-28T06:23:21.990 に答える