如何解决如果字符串具有一组[[]或{},等字符的通配符,则如何将其转换为列表
我有一个这样的字符串
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']]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。