鱼C论坛

 找回密码
 立即注册
查看: 2905|回复: 8

[已解决]判断字符串是不是合法的列表或字典

[复制链接]
发表于 2022-8-4 10:42:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
现在有大量的字符串,需要对它们作以下判断:
判断字符串的内容是不是合法的列表或字典
例如
  1. a = '[1, 2, 3]'    # 合法
  2. b = '[1, 2, 3'     # 不合法
  3. c = '{123}'        # 不合法
  4. d = '{a: None}'  # 合法
复制代码

字符串的内容包括但不限于:
  1. '[ 12:3 ]'
  2. '{123}'
  3. 'a'
  4. '123'
复制代码

=======================
我的想法:
用re判断——规则太复杂
用try和json.loads判断——效率有点低
=======================
因为要处理大量字符串,所以效率需要高一点
请问各位大佬,有无好的思路?
最佳答案
2022-8-4 11:17:12
只有正则最方便了
(可以先把空格去掉)
下面是匹配列表的代码
应该没问题(第一次写这个)
  1. from re import search
  2. inList = "[]"
  3. inList = inList.replace(" ", "")
  4. reStr = "\[(.+?,)*?.*?\]"
  5. print(search(reStr, inList))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-4 11:07:49 | 显示全部楼层
  1. def check(c):
  2.     r = False
  3.     if '[' in c or '{' in c:
  4.         try:
  5.             x = eval(c)
  6.             if '[' in c or '{' in c and ':' in c:
  7.                 r = True
  8.         except:
  9.             pass
  10.     return r

  11. a = ['[1, 2, 3]' , '[1, 2, 3' , '{123}' , '{a : None}' , '[12 : 3]' , '{ 12 : 3 }' , 'a' , '123']
  12. for c in a:
  13.     print("'" + c + "'" + " : # 合法") if check(c) else print("'" + c + "'" + " : # 不合法")
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\Python>python a.py
  2. '[1, 2, 3]' : # 合法
  3. '[1, 2, 3' : # 不合法
  4. '{123}' : # 不合法
  5. '{a : None}' : # 不合法
  6. '[12 : 3]' : # 不合法
  7. '{ 12 : 3 }' : # 合法
  8. 'a' : # 不合法
  9. '123' : # 不合法

  10. D:\[00.Exerciese.2022]\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-4 11:17:12 | 显示全部楼层    本楼为最佳答案   
只有正则最方便了
(可以先把空格去掉)
下面是匹配列表的代码
应该没问题(第一次写这个)
  1. from re import search
  2. inList = "[]"
  3. inList = inList.replace(" ", "")
  4. reStr = "\[(.+?,)*?.*?\]"
  5. print(search(reStr, inList))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-4 11:38:38 | 显示全部楼层
liuzhengyuan 发表于 2022-8-4 11:17
只有正则最方便了
(可以先把空格去掉)
下面是匹配列表的代码

好吧,我来试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-4 11:39:58 | 显示全部楼层

别那么快设最佳啊,万一还有问题呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-4 11:44:03 | 显示全部楼层
liuzhengyuan 发表于 2022-8-4 11:39
别那么快设最佳啊,万一还有问题呢?

我刚去试了下,觉得暂时没问题了,后面有啥问题再改下re表达式吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-4 11:45:30 | 显示全部楼层
鱼cpython学习者 发表于 2022-8-4 11:44
我刚去试了下,觉得暂时没问题了,后面有啥问题再改下re表达式吧

字典也是一样,只不过多了一个冒号插入在中间
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-4 11:46:12 | 显示全部楼层
liuzhengyuan 发表于 2022-8-4 11:45
字典也是一样,只不过多了一个冒号插入在中间

ok,感谢补充
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表