鱼C论坛

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

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

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

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

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

x
现在有大量的字符串,需要对它们作以下判断:
判断字符串的内容是不是合法的列表或字典
例如
a = '[1, 2, 3]'    # 合法
b = '[1, 2, 3'     # 不合法
c = '{123}'        # 不合法
d = '{a: None}'  # 合法
字符串的内容包括但不限于:
'[ 12:3 ]'
'{123}'
'a'
'123'
=======================
我的想法:
用re判断——规则太复杂
用try和json.loads判断——效率有点低
=======================
因为要处理大量字符串,所以效率需要高一点
请问各位大佬,有无好的思路?
最佳答案
2022-8-4 11:17:12
只有正则最方便了
(可以先把空格去掉)
下面是匹配列表的代码
应该没问题(第一次写这个)
from re import search
inList = "[]"
inList = inList.replace(" ", "")
reStr = "\[(.+?,)*?.*?\]"
print(search(reStr, inList))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

a = ['[1, 2, 3]' , '[1, 2, 3' , '{123}' , '{a : None}' , '[12 : 3]' , '{ 12 : 3 }' , 'a' , '123']
for c in a:
    print("'" + c + "'" + " : # 合法") if check(c) else print("'" + c + "'" + " : # 不合法")
        运行实况:
D:\[00.Exerciese.2022]\Python>python a.py
'[1, 2, 3]' : # 合法
'[1, 2, 3' : # 不合法
'{123}' : # 不合法
'{a : None}' : # 不合法
'[12 : 3]' : # 不合法
'{ 12 : 3 }' : # 合法
'a' : # 不合法
'123' : # 不合法

D:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

好吧,我来试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

别那么快设最佳啊,万一还有问题呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我刚去试了下,觉得暂时没问题了,后面有啥问题再改下re表达式吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

字典也是一样,只不过多了一个冒号插入在中间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

ok,感谢补充
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 06:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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