把带嵌套括号的字符串转换成嵌套列表,python

2024-09-28 22:37:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在堆栈溢出时还有其他问题与此相关,例如how-to-parse-a-string-and-return-a-nested-array?

但它们都引用((abc)de(fg)))格式的列表。转到表单:[['a','b','c']'d','e'['f','g',]]]我有一个表单列表:

((wordOneWord2)OtherWord(FinalWord)))

通过使用我从其他问题中学习到的方法,嵌套列表的形式如下:

^{pr2}$

而不是你想要的

[['wordOneWord2'], 'OtherWord', ['FinalWord']]

我可以通过逐个字母解析列表,然后将每个列表中的项连接在一起,从而达到预期的结果,但这需要比我认为需要的代码更多的代码,有没有一种更快的方法来做到这一点?在


Tags: andto方法代码表单列表stringreturn
1条回答
网友
1楼 · 发布于 2024-09-28 22:37:48

基于此solution by falsetru

import re

def parse_nested(text, left=r'[(]', right=r'[)]', sep=r','):
    """ Based on https://stackoverflow.com/a/17141899/190597 (falsetru) """
    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()

text = '((wordOneWord2)OtherWord(FinalWord))'
print(parse_nested(text))
# [[['wordOneWord2'], 'OtherWord', ['FinalWord']]]

相关问题 更多 >