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

问题描述

我有一个这样的字符串

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']]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...