我想拆分字符串
" 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]'].
真正的问题是这个字符串是众多字符串中的一个,列表可能包含很多或没有组件,所以我必须处理这个是一般方法。
我可以搜索'['
,然后搜索']'
以关闭列表,但由于我不知道任何列表的长度,这似乎是低效的做事方式。
任何帮助都非常感谢!
答案 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更合理的东西。