在python中使用模式匹配,从.lua文件中提取一个表
我有一个.lua文件,其中存储了以下格式的表:在python中使用模式匹配,从.lua文件中提取一个表,python,regex,Python,Regex,我有一个.lua文件,其中存储了以下格式的表: ["f@someFaction - someServer@guildVaults"] = { ["someStr1"] = { ["someStr2"] = 7, ["someStr3"] = 2 } ["someStr4"] = { ["someStr5"] = 7, ["someStr6"] = 2 } } 基本上可以有任意数量的嵌套表。我知道要提
["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文件示例:
您需要设置适当的标志。此外,我将提取所有内容,直到一行中出现一个
{
(假设所有表的格式都类似):
对于提供的输入数据,它打印:
{
["someStr1"] = {
["someStr2"] = 7,
["someStr3"] = 2
}
["someStr4"] = {
["someStr5"] = 7,
["someStr6"] = 2
}
}
也许您希望将lua转换为python,然后执行结果并获取本机python对象
[”f@someFaction - someServer@guildVaults“]={
foo={
并在末尾添加}foo = {
"someStr1" : {
"someStr2" : 7,
"someStr3" : 2
},
"someStr4" : {
"someStr5" : 7,
"someStr6" : 2
}
}
现在,这可以在Python中进行操作。不幸的是,这会产生一个空结果。以下是有关如何格式化的屏幕截图:。这里是另一个隐藏了第一个公会的截图:我已经编辑了OP,并在那里放置了一个直接的样本数据(.lua文件)。事实上,这是最终目标。问题是“提取所有文本直到结尾}”部分。应用一些启发式:)例如,}单独在位置1中。我之所以要使用模式匹配,是因为这里应该可以提取文本:[”f@someFaction - someServer@guildVaults“]={…要提取的文本…}。但是,我无法使它工作,即使使用@alecxe的解决方案,它仍然无法工作-因此我提供了一个实际的文件来进行一些测试。也许这可以通过一些高级的regexp-fu来完成。也许我会将这两种方法结合起来:简单地循环文件+简单的模式匹配,搜索每个块/变量的第一行和最后一行。我已经意识到错误在于在打开文件时使用了“rb”而不是“r”。它现在按照alecxe的建议工作(有一些小的调整)。
foo = {
"someStr1" : {
"someStr2" : 7,
"someStr3" : 2
},
"someStr4" : {
"someStr5" : 7,
"someStr6" : 2
}
}