2017-08-03 183 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

相关问题