如果字符串具有一组[[]或{},等字符的通配符,则如何将其转换为列表

问题描述

我有一个这样的字符串

s = 'a,s,[c,f],[f,t]'

我想将其转换为列表

S = ['a','s',['c','f'],['f','t']]

我尝试使用strip()

d = s.strip('][').split(',')

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

output = ['a','[c','f]','[f','t']

解决方法

您可以使用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']]

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

这仅在您的输入字符串遵循Python表达式语法或足够接近以机械方式转换为Python语法时才有效(如上面通过添加引号和括号所做的那样)。如果此假设不成立,则可能需要使用parsing library。 (您还可以手动编写递归下降解析器,但是正确完成工作可能不只是使用解析库。)

,

除了ast.literal_eval以外,您可以使用json程序包,其使用的NPE答案的限制大致相同:

import re
import json

qs = re.sub(r'(\w+)',s)  # add quotes
ls = json.loads('[' + qs + ']')
print(ls)         
# ['a','t']]