2017-08-03 157 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'}] 

編輯: Python版本< = 2.7。

編輯2: 這幾乎是工作,只是缺少}

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

編輯3: 使用eval

+3

'ast.literal_eval' – kindall

+0

其中關於Python版本? – 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