2017-08-03 41 views
0

文字列をリストに変換しようとしていますが、splitfindallを試しましたが、運はありません。また、私はforループを回避したいのですが....分割文字列区切り文字

サンプル:

import re 

string2list = "[{u'name': u'a', u'number': u'123', u'addr': u'123 
sunshine'}, {u'name': u'b', u'number': u'456', u'addr': u'123 sunset'}]" 

print re.findall('[^},]+},', string2list) 
print re.split('[},]', string2list) 
print re.split('[},] + }', string2list)` 

所望の出力は、元の文字列のリストである:

[{u'name': u'a', u'number': u'123', u'addr': u'123 
sunshine'}, {u'name': u'b', u'number': u'456', u'addr': u'123 sunset'}] 

EDIT: Pythonのバージョン< = 2.7。

EDIT 2: これはほとんど機能し、ちょうど}行方不明:evalを使用して :

print string2list.replace('[', '').replace(']', '').split('}')

EDIT 3。

+3

のPythonの 'ast.literal_eval' – kindall

+0

バージョン? – dawg

+0

@dawgは2.4以降で動作するはずです。 –

答えて

1

正規表現モジュールは、このジョブでは間違ったツールです。

あなたはliteral_evalが必要です

from ast import literal_eval 

string2list = "[{u'name': u'a', u'number': u'123', u'addr': u'123 
sunshine'}, {u'name': u'b', u'number': u'456', u'addr': u'123 sunset'}]" 

print literal_eval(string2list) 
# [{u'addr': u'123sunshine', u'name': u'a', u'number': u'123'}, 
# {u'addr': u'123 sunset', u'name': u'b', u'number': u'456'}] 
+0

残念ながら私は2.7より古いPythonを扱っています。 –

+1

@Simply_meこれはあなたの質問によく言及するものです。 – DeepSpace

+1

@Simply_me 'literal_eval'はPython 2.6で導入されました。それよりも前のバージョンを使っているのであれば、私が言うべきことは幸運です:) – DeepSpace

関連する問題