gpt4 book ai didi

python - 正则表达式解析带有括号的嵌套子列表的列表?

转载 作者:行者123 更新时间:2023-12-01 06:54:52 24 4
gpt4 key购买 nike

我正在尝试重构一些用以下格式解析字符串的 Python 代码:

thing_1,thing_2,things_3[thing_31,thing_32,thing_34[thing_341]],thing_5

最终结果是结构化结果,例如:

{
"thing_1": True,
"thing_2": True,
"thing_3": {
"thing_31": True,
"thing_32": True,
"thing_34: {
"thing_341": True
}
},
"thing_5": True,
}

实际上,这是 API 请求的字段列表(仅返回给定字段),支持定义嵌套对象所需的字段。

我一直在尝试各种方法来编写reg ex(如果可能的话)。我的想法是首先在括号的内容上解析它,同时保留每个括号之前的第一个元素,最后我只剩下外部顶级列表。但事实证明,用正则表达式描述它比用英语“说”更困难。

下面是一些值得注意的尝试,但那里的分组都是错误的。

(([a-z0-9_]+)(\[[a-z0-9,_*]+\]*)+)

([a-z0-9_]+)(\[[a-z0-9,_*]+\]*)

(?<=[a-z0-9_])(\[[a-z0-9,_*]+\]*)

这是否可以以一种优雅的方式做到?

谢谢!

最佳答案

由于您已经有了一个解析器并且只是想知道另一种方法,您可以考虑

import json, re
s = "thing_1,thing_2,things_3[thing_31,thing_32,thing_34[thing_341]],thing_5"
s = re.sub(r'\w+(?![\[\w])', r'"\g<0>": true', s)
js = json.loads('{' + re.sub(r'\w+(?=\[)', r'"\g<0>":', s).replace('[', '{').replace(']', '}') + '}')
print (json.dumps(js, indent=4, sort_keys=True))

输出:

{
"thing_1": true,
"thing_2": true,
"thing_5": true,
"things_3": {
"thing_31": true,
"thing_32": true,
"thing_34": {
"thing_341": true
}
}
}

请参阅Python demo online .

注释:

  • re.sub(r'\w+(?![\[\w])', r'"\g<0>": true', s) - 包装所有未紧随 [ 的 1+ 个单词字符 block 用双引号括起来,并附加 : true在他们之后
  • re.sub(r'\w+(?=\[)', r'"\g<0>":', s) - 包装所有紧随 [ 的 1+ 个单词字符 block 用双引号括起来,并附加 :在他们之后
  • .replace('[', '{').replace(']', '}')替换所有[{]}
  • 要将字符串解析为 JSON,结果用 {...} 包装。
  • 解析后json.loads(s) , json.dumps(js, indent=4, sort_keys=True)漂亮地打印 json 并转储它。

关于python - 正则表达式解析带有括号的嵌套子列表的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com