【发布时间】:2019-10-22 20:18:52
【问题描述】:
我有一个如下所示的字符串:
'(a (b (c d e f)) g)'
我想把它变成这样一个嵌套列表:
['a', ['b', ['c', 'd', 'e', 'f']], 'g']
我用过这个功能:
def tree_to_list(text, left=r'[(]', right=r'[)]', sep=r','):
pat = r'({}|{}|{})'.format(left, right, sep)
tokens = re.split(pat, text)
stack = [[]]
for x in tokens:
if not x or re.match(sep, x): continue
if re.match(left, x):
stack[-1].append([])
stack.append(stack[-1][-1])
elif re.match(right, x):
stack.pop()
if not stack:
raise ValueError('error: opening bracket is missing')
else:
stack[-1].append(x)
if len(stack) > 1:
print(stack)
raise ValueError('error: closing bracket is missing')
return stack.pop()
但结果不是我所期望的。字符串之间没有逗号:
['a', ['b', ['c' 'd' 'e' 'f']], 'g']
你能帮我解决一下吗
【问题讨论】:
标签: python python-3.x string list function