Pau*_*arr 5 python parsing nested list
Stack Overflow 上还有其他涉及此问题的问题,例如如何解析字符串并返回嵌套数组?
但它们都引用了((abc)de(fg))). 转到表格:[['a','b','c']'d','e'['f','g',]]] 我有一个表格列表:
((wordOneWord2)OtherWord(FinalWord)))
Run Code Online (Sandbox Code Playgroud)
通过使用我从嵌套列表的其他问题中学到的方法,其形式如下:
[['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']]]
Run Code Online (Sandbox Code Playgroud)
而不是想要的
[['wordOneWord2'], 'OtherWord', ['FinalWord']]
Run Code Online (Sandbox Code Playgroud)
我可以通过逐个字母解析列表,然后将每个列表中的项目连接在一起来实现所需的结果,但这需要比我认为必要的更多的代码,是否有更快的方法来做到这一点?
import re
def parse_nested(text, left=r'[(]', right=r'[)]', sep=r','):
""" Based on /sf/answers/1199932961/ (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']]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2585 次 |
| 最近记录: |