繁体   English   中英

在python中使用模式匹配,从.lua文件中提取表

[英]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对象。

  1. 检测顶级行: ["f@someFaction - someServer@guildVaults"] = {

并提取所有文本,直到结尾}。

  1. 在本文中,删除所有方括号,将所有“}”替换为“}”,并将=替换为:。

  2. 在结果前添加一些变量名,例如foo = {并在末尾添加}。

你会得到:

foo = {
    "someStr1" : {
        "someStr2" : 7,
        "someStr3" : 2
    },
    "someStr4" : {
        "someStr5" : 7,
        "someStr6" : 2
    }
}

现在,可以在Python中进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM