将字符串拆分为列表并再次拆分

时间:2014-01-02 16:45:06

标签: python list

我想拆分字符串

"   510     -9999999  9             99         12             5             [3, 0]        []            [6]       "

(在条目之间包含或多或少的随机数字空白)到它的组成部分,包括字符串中的列表。我可以到达这个

['510', '-9999999', '9', '99', '12', '5', '[3,', '0]', '[]', '[6]']

通过使用拆分和替换。但是,我想重新构建原始字符串中的列表,以便我可以进入

['510', '-9999999', '9', '99', '12', '5', '[3,0]', '[]', '[6]'].

真正的问题是这个字符串是众多字符串中的一个,列表可能包含很多或没有组件,所以我必须处理这个是一般方法。

我可以搜索'[',然后搜索']'以关闭列表,但由于我不知道任何列表的长度,这似乎是低效的做事方式。

任何帮助都非常感谢!

3 个答案:

答案 0 :(得分:0)

如果列表无法嵌套,那么我认为可以使用以下命令预处理字符串:

s = "   510     -9999999  9             99         12             5             [3, 0]        []            [6]       "

opened = False
s_new = ""
for i in s:
    if i == "[":
        opened = True
    if i == "]":
        opened = False
    if not opened or (opened and i != " "):
        s_new += i

然后将其拆分为列表:

l = s_new.split()

答案 1 :(得分:0)

如果列表未嵌套,您可以尝试:

def mysplit (a):
    return re.split(' +', re.sub('\\[(.*?)\\]', lambda m: '[{}]'.format(m.groups()[0].replace(' ', '')), a))

答案 2 :(得分:0)

总是有正则表达式,但你可以像这样便宜地做到这一点

>>> import shlex
>>> shlex.split(s.replace('[','"[').replace(']',']"'))
['510', '-9999999', '9', '99', '12', '5', '[3, 0]', '[]', '[6]']

正确的解决方案是使用pyparsing模块,甚至更好地控制输入源,为你提供像json更合理的东西。