我有一个.lua文件,其中存储了以这种格式存储的表:
["f@someFaction - someServer@guildVaults"] = {
["someStr1"] = {
["someStr2"] = 7,
["someStr3"] = 2
}
["someStr4"] = {
["someStr5"] = 7,
["someStr6"] = 2
}
}
基本上可以有任意数量的嵌套表。我知道我要提取的初始表的名称,但是,我无法提取后续表。
with open("somePath", "rb") as file:
f = file.read()
pattern = r"\[\"f@[a-zA-z]+ - [a-zA-z]+@guildVaults\"\] = \{[ \t\n]*"
guildVaults = re.findall(pattern, f)
for guild in guildVaults:
print guild
结果:
["f@Alliance - Thunderhorn@guildVaults"] = {
["f@Alliance - Proudmoore@guildVaults"] = {
["f@Alliance - Kazzak@guildVaults"] = {
["f@Horde - Draenor@guildVaults"] = {
有什么建议吗?
编辑: 这里的.lua文件示例: http://www.pastefile.com/Tx2LVD
答案 0 :(得分:1)
您需要设置相应的标记。此外,我会提取所有内容,直到一行{
出现(假设所有表的格式相似):
pattern = r"\[\"f@[a-zA-z]+ - [a-zA-z]+@guildVaults\"\] = ({.*?^}$)"
guildVaults = re.findall(pattern, data, re.MULTILINE | re.DOTALL)
for guild in guildVaults:
print(guild)
对于提供的输入数据,它会打印:
{
["someStr1"] = {
["someStr2"] = 7,
["someStr3"] = 2
}
["someStr4"] = {
["someStr5"] = 7,
["someStr6"] = 2
}
}
答案 1 :(得分:0)
也许您想将lua转换为python,然后执行结果并获取本机python对象。
["f@someFaction - someServer@guildVaults"] = {
并提取所有文字直到结尾}。
在本文中,删除所有方括号,将所有“}”替换为“}”,然后将=替换为:。
为结果添加一些变量名称,例如foo = {
最后添加}。
你会得到:
foo = {
"someStr1" : {
"someStr2" : 7,
"someStr3" : 2
},
"someStr4" : {
"someStr5" : 7,
"someStr6" : 2
}
}
现在,这可以在Python中进行操作。