Python解析包含函数、列表和字典的字符串

2024-01-25

我正在尝试找到方法来解析可以包含用 python 语法编写的变量、函数、列表或字典的字符串,并用“,”分隔。空格应该在任何地方都可以使用,因此当它不在 ()、[] 或 {} 内时,请用“,”分隔。

示例字符串:"variable, function1(1,3), function2([1,3],2), ['list_item_1','list_item_2'],{'dict_key_1': "dict_item_1"}"

另一个示例字符串:"variable,function1(1, 3) , function2( [1,3],2), ['list_item_1','list_item_2'],{'dict_key_1': "dict_item_1"}"

输出示例["variable", "function1(1,3)", "function2([1,3],2)", "['list_item_1','list_item_2']", "{'dict_key_1': "dict_item_1"}"]

编辑: 该代码的原因是解析字符串然后运行它exec("var = &s" % list[x])。 (是的,我知道这可能不是推荐的做事方式)


我想这里的主要问题是数组和字典中也有逗号,所以只需使用str.split(",")行不通的。一种方法是一次解析字符串一个字符,并跟踪是否所有括号都闭合。如果是,当遇到逗号时,我们可以将当前结果附加到数组中。这是我的尝试:

s = "variable, function1(1,3),function2([1,3],2),['list_item_1','list_item_2'],{'dict_key_1': 'dict_item_1'}"

tokens = []
current = ""
open_brackets = 0

for char in s:
    current += char

    if char in "({[":
        open_brackets += 1
    elif char in ")}]":
        open_brackets -= 1
    elif (char == ",") and (open_brackets == 0):
        tokens.append(current[:-1].strip())
        current = ""

tokens.append(current)

for t in tokens:
    print(t)

"""
    variable
    function1(1,3)
    function2([1,3],2)
    ['list_item_1','list_item_2']
    {'dict_key_1': 'dict_item_1'}
"""
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python解析包含函数、列表和字典的字符串 的相关文章

随机推荐