我建议你看看 PyParsing。
http://pyparsing.wikispaces.com/
您还可以查看 Python“scanf”库。
sscanf in Python
如果您只需要使用 Python 内置函数来解决这个问题,我建议您使用带有捕获组的正则表达式。
编辑:嗯,我又看了一遍。你确实说过它来自 JavaScript ......这在我看来就像一个合法的 JSON 数组。我尝试使用json 模块(特别是方法函数json.loads()),但无法解析。
但是! Python 语法接近于 JavaScript 语法。替换一些东西,eval() 可以解析这个,或者ast.literal_eval()。我们需要将true 替换为True,将false 替换为False,将null 替换为None,ast.literal_eval() 才会接受它。
import ast
s = '[[{"date":"January 2004"},True,False,100,null,null,true],[{"date":"February 2004"},False,False,99,null,null,true]]'
s1 = s.replace("true","True").replace("false","False").replace("null","None")
x = ast.literal_eval(s1)
print(x)
上面将打印:
[[{'date': 'January 2004'}, True, False, 100, None, None, True], [{'date': 'February 2004'}, False, False, 99, None, None, True]]
最初我展示了定义变量(如true = True)并使用eval() 来解析它,但当然eval() 是一个潜在的安全漏洞;因此,如果您需要解析可能来自网页或任何其他不受信任的来源的文本,导入ast 并改用ast.literal_eval() 是值得的。
编辑:好的,json 模块可以解析这个;问题是使用True 而不是true 和False 而不是false。只需使用str.replace() 方法函数修复这些问题,然后json.loads() 即可解析。
我正要发布带有.replace()方法调用的代码片段,这时问题再次更新,大写的True和False变成了普通的合法JSON。
所以我的最终答案:
s = '[[{"date":"January 2004"},true,false,100,null,null,true],[{"date":"February 2004"},false,false,99,null,null,true]]'
import json
x = json.loads(s)
print(x)
打印:
[[{u'date': u'January 2004'}, True, False, 100, None, None, True], [{u'date': u'February 2004'}, False, False, 99, None, None, True]]