[英]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'}"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.