繁体   English   中英

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

[英]Python parse string containing functions, lists and dicts

我试图找到解析字符串的方法,这些字符串可以包含用“,”分隔的 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'}
"""

您是否尝试过使用拆分?

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

正则表达式不太适合解析任意代码的复杂性。 你到底想完成什么? 您可以(不安全地)使用eval将字符串作为代码进行评估。 或者,如果您想在不eval情况下理解它,您可以使用astdis模块进行各种形式的检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM