[英]Using pattern matching in python, extract a table from .lua file
我有一个.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
您需要设置适当的标志 。 另外,我将提取所有内容,直到一行中出现单个{
(假设所有表的格式都相似):
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
}
}
也许您想将lua转换为python,然后执行结果并获取本机python对象。
["f@someFaction - someServer@guildVaults"] = {
并提取所有文本,直到结尾}。
在本文中,删除所有方括号,将所有“}”替换为“}”,并将=替换为:。
在结果前添加一些变量名,例如foo = {
并在末尾添加}。
你会得到:
foo = {
"someStr1" : {
"someStr2" : 7,
"someStr3" : 2
},
"someStr4" : {
"someStr5" : 7,
"someStr6" : 2
}
}
现在,可以在Python中进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.