2016-06-12 17 views
0

リストに配置する必要がある文字列があります。例えば私はPython3のエレガントな文字列解析

C C .0033 .0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C 

だから引用符ですべてが単一のリスト要素となり

['C', 'C', '.0033', '.0016', 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4', 'C'] 

になっていることが必要です。さもなければ、空白で区切られたすべてが単一のリスト要素になります。

私の最初のアイデアは、新しい配列に'を含み、再び一緒に引用されたセクションにあるものを置かない項目を置き、シンプルなスプリットた:

>>> s.split() 
['C', 'C', '.0033', '.0016', "'International", 'Tables', 'Vol', 'C', 'Tables', '4.2.6.8', 'and', "6.1.1.4'", 'C'] 
>>> arr = [] 
>>> i = 0 
>>> while i < len(s): 
     v = '' 
     if s[i].startswith("'"): 
      while not s[i].endswith("'"): 
       v = v.append(s[i]+ " ") 
       i += 1 
      v.append(s[i]) 
      arr.append(v) 
     else: 
      arr.append(s[i]) 

しかし、この戦略はかなり醜いです、そして、私は文字列が単一のスペースに分割されたと仮定する必要があります。

s.partition("'")は非常に有望に見えた:1つとして

>>> s.partition("'") 
('C C .0033 .0016 ', "'", "International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C") 

が、私は、私はを反復処理として再度分割する必要があるため、それは厄介だし、それは文脈依存です引用符でました。

上記のようにこの文字列を分割する簡単なPython3の方法はありますか?

答えて

2

shlexモジュールを使用できます。例:

import shlex 

print(shlex.split("C C .0033 .0016 'International Tables Vol C Tables 4.2.6.8 and 6.1.1.4' C")) 
+0

OMGどのように知ったのですか? – user14717

+0

悪い単語の選択。編集された@NickThompson – Zroq