python - 通过考虑多个值来拆分字符串
问题描述
我正在尝试在 Python 2.7 中拆分以下类型的字符串,以便将其转换为值列表:
s = "19, '8X','1Gb', '1.5 GHz dual-core',342,'4.3', '720x1280','32,35 x 66,2 x 10,12', 130, '', 4, 9"
我想获得类似于以下内容的值列表:
list_s = [19, '8X', '1Gb', '1.5 GHz dual-core', 342, '4.3', '720x1280', '32,35 x 66,2 x 10,12', 130, ' ', 4, 9]
我尝试通过以下方式使用函数split()和函数re.split():
list_s = s.split(",")
#OUTPUT = ['19', " '8X'", " '1Gb'", " '1.5 GHz dual-core'", ' 342', " '4.3'", " '720x1280'", " '32", '35 x 66', '2 x 10', "12'", ' 130', " ''", ' 4', ' 9']
list_s2 = re.split("([`]|[']|[\"]){1}[,]", s)
#OUTPUT = ["19, '8X", "'", " '1Gb", "'", " '1.5 GHz dual-core", "'", " 342, '4.3", "'", " '720x1280", "'", " '32,35 x 66,2 x 10,12", "'", " 130, '", "'", ' 4, 9']
你能建议我解决这个问题吗?
解决方案
直接eval
用于固定的原始字符串效果很好:
>>> s = "19, '8X','1Gb', '1.5 GHz dual-core',342,'4.3', '720x1280','32,35 x 66,2 x 10,12', 130, '', 4, 9"
>>> list(eval(s))
[19, '8X', '1Gb', '1.5 GHz dual-core', 342, '4.3', '720x1280', '32,35 x 66,2 x 10,12', 130, '', 4, 9]
不过,看看这个。eval
正如评论中提到的那样肯定是危险的,并且应该仅用于您确定的静态/固定原始字符串。在这种情况下,发布的答案建议ast.literal_eval
是最安全和正确的选择。
推荐阅读
- python - 冻结 pytorch 模型的问题 - requires_grad 始终为真
- typescript - Next.js 和 getStaticProps 的打字稿问题
- sql-server - 报告服务器 (SSRS) 电子邮件传递延迟 10 小时
- flutter - Flutter 数据表问题
- python - 树莓派:文件丢失案例
- scala - 从 Scala 中的 JSON 返回值(akka 和 spray)
- python - 文件完成执行时返回值的困惑
- reactjs - 对象在日期道具上作为 React 子项无效
- salesforce - InsertData ampscript 函数收到错误“函数表达式无效”
- sql - 按兄弟属性的值过滤 JSON 数据