如果字符串包含 [] 或 {}、() 等一组字符的通配符,如何将字符串转换为列表

Man*_*nak 0 python string list-comprehension list

我有一个这样的字符串

s = 'a,s,[c,f],[f,t]'
Run Code Online (Sandbox Code Playgroud)

我想将其转换为列表

S = ['a','s',['c','f'],['f','t']]
Run Code Online (Sandbox Code Playgroud)

我尝试使用 strip()

d = s.strip('][').split(',')
Run Code Online (Sandbox Code Playgroud)

但它没有给我想要的输出:

output = ['a', 's', '[c', 'f]', '[f', 't']
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 6

您可以使用ast.literal_eval(),首先将每个元素用引号括起来:

>>> qs = re.sub(r'(\w+)', r'"\1"', s)  # add quotes
>>> ast.literal_eval('[' + qs + ']')   # enclose in brackets & safely eval
['a', 's', ['c', 'f'], ['f', 't']]
Run Code Online (Sandbox Code Playgroud)

如果您的元素可以包含非单词字符,您可能需要调整正则表达式。

这仅适用于您的输入字符串遵循 Python 表达式语法或足够接近以机械方式转换为 Python 语法(如我们上面通过添加引号和括号所做的那样)。如果此假设不成立,您可能需要考虑使用解析库。(你也可以手工编写一个递归下降解析器,但这可能比仅仅使用解析库需要更多的工作来正确完成。)