Turn a string with nested parenthesis into a nested list, python(将带有嵌套括号的字符串转换为嵌套列表,python)
问题描述
在 Stack Overflow 上还有其他相关问题,例如 如何解析字符串并返回嵌套数组?
There are other questions referring to this on Stack Overflow such as how-to-parse-a-string-and-return-a-nested-array?
但它们都是以((abc)de(fg)))
格式引用列表.转到表格:[['a','b','c']'d','e'['f','g',]]]
我有一个列表形式:
But they all refer to lists in the format of ((abc)de(fg)))
. going to the form:[['a','b','c']'d','e'['f','g',]]]
I have a list of the form:
((wordOneWord2)OtherWord(FinalWord)))
通过使用我从嵌套列表的其他问题中学到的方法,形式为:
By using the methods I learnt from the other questions by nested list was of the form:
[['w','o','r','d','O','n','e','W','o','r','d','2']'O','t','h','e','r','W','o','r','d',['F','i','n','a','l','W','o','r','d']]]
而不是想要的
[['wordOneWord2'], 'OtherWord', ['FinalWord']]
我可以通过逐个字母解析列表然后将每个列表中的项目重新连接在一起来获得所需的结果,但它需要的代码比我认为需要的要多,有没有更快的方法?
I can achieve the desired result by parsing the list letter by letter and then concatenating the items within each list back together but it takes more code than I think necessary, is there a faster way of doing this?
推荐答案
基于此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']]]
这篇关于将带有嵌套括号的字符串转换为嵌套列表,python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将带有嵌套括号的字符串转换为嵌套列表,pyth
基础教程推荐
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 筛选NumPy数组 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01