鱼cpython学习者 发表于 2022-8-4 10:42:54

判断字符串是不是合法的列表或字典

现在有大量的字符串,需要对它们作以下判断:
判断字符串的内容是不是合法的列表或字典
例如
a = ''    # 合法
b = '[1, 2, 3'   # 不合法
c = '{123}'      # 不合法
d = '{a: None}'# 合法
字符串的内容包括但不限于:
'[ 12:3 ]'
'{123}'
'a'
'123'
=======================
我的想法:
用re判断——规则太复杂
用try和json.loads判断——效率有点低
=======================
因为要处理大量字符串,所以效率需要高一点
请问各位大佬,有无好的思路?

jackz007 发表于 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 = ['' , '' , '{ 12 : 3 }' , 'a' , '123']
for c in a:
    print("'" + c + "'" + " : # 合法") if check(c) else print("'" + c + "'" + " : # 不合法")
      运行实况:
D:\\Python>python a.py
'' : # 合法
'[1, 2, 3' : # 不合法
'{123}' : # 不合法
'{a : None}' : # 不合法
'' : # 不合法
'{ 12 : 3 }' : # 合法
'a' : # 不合法
'123' : # 不合法

D:\\Python>

liuzhengyuan 发表于 2022-8-4 11:17:12

只有正则最方便了
(可以先把空格去掉)
下面是匹配列表的代码
应该没问题(第一次写这个)
from re import search
inList = "[]"
inList = inList.replace(" ", "")
reStr = "\[(.+?,)*?.*?\]"
print(search(reStr, inList))

鱼cpython学习者 发表于 2022-8-4 11:38:38

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


好吧,我来试试

liuzhengyuan 发表于 2022-8-4 11:39:58

鱼cpython学习者 发表于 2022-8-4 11:38
好吧,我来试试

别那么快设最佳啊,万一还有问题呢?{:10_277:}

鱼cpython学习者 发表于 2022-8-4 11:44:03

liuzhengyuan 发表于 2022-8-4 11:39
别那么快设最佳啊,万一还有问题呢?

我刚去试了下,觉得暂时没问题了,后面有啥问题再改下re表达式吧{:10_282:}

liuzhengyuan 发表于 2022-8-4 11:45:30

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

字典也是一样,只不过多了一个冒号插入在中间

鱼cpython学习者 发表于 2022-8-4 11:46:12

liuzhengyuan 发表于 2022-8-4 11:45
字典也是一样,只不过多了一个冒号插入在中间

ok,感谢补充{:10_256:}
页: [1]
查看完整版本: 判断字符串是不是合法的列表或字典