2016-03-07 94 views
1

提取表我有其中存儲有這種格式的一個表文件.lua:,從.lua文件

["[email protected] - [email protected]"] = { 
    ["someStr1"] = { 
     ["someStr2"] = 7, 
     ["someStr3"] = 2 
    } 
    ["someStr4"] = { 
     ["someStr5"] = 7, 
     ["someStr6"] = 2 
    } 
} 

基本上可以有任意數量的嵌套表。我知道我要提取的初始表的名稱,但是,我無法提取後續表。

with open("somePath", "rb") as file: 
    f = file.read() 

pattern = r"\[\"[email protected][a-zA-z]+ - [a-zA-z][email protected]\"\] = \{[ \t\n]*" 
guildVaults = re.findall(pattern, f) 

for guild in guildVaults: 
    print guild 

結果:

["[email protected] - [email protected]"] = { 
["[email protected] - [email protected]"] = { 
["[email protected] - [email protected]"] = { 
["[email protected] - [email protected]"] = { 

有什麼建議?

編輯:這裏的.lua文件的 例如: http://www.pastefile.com/Tx2LVD

回答

1

您需要設置相應的標誌。另外,我想提取的一切,直到一個{存在於線(假設所有的表都類似格式):

pattern = r"\[\"[email protected][a-zA-z]+ - [a-zA-z][email protected]\"\] = ({.*?^}$)" 
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 
    } 
} 
+0

不幸的是,這會產生一個空的結果。以下是如何格式化的屏幕截圖:https://i.gyazo.com/8af990c1cb1711fc40db4c7a1adb74fe.png。這是隱藏第一個公會的另一個屏幕截圖:https://i.gyazo.com/3353d4d40e44e547be7b45a882373b04.png – emihir0

+0

我已經編輯了OP,並在那裏放了一個直接的示例數據(.lua文件) – emihir0

0

也許你想將lua轉換爲python,然後執行結果並獲得本機python對象。

  1. 檢測頂層線:["[email protected] - [email protected]"] = {

,並提取所有文字,直到結束}。

  1. 在本文中,刪除所有方括號,將所有「}」替換爲「},」和= to:。

  2. 在結果前加上一些變量名,例如foo = { 並在末尾加上}。

您將獲得:現在

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

,這可以在Python進行操作。

+0

的確,這是結束目標。問題是「提取所有文本直到結束」部分。 – emihir0

+0

應用一些啓發式:)贊同,}獨自在位置1.或者在困難的方式,計數開放和關閉花括號。 – ddbug

+0

那麼我想使用模式匹配的原因是因爲它應該可以在這裏提取文本:[「f @ someFaction - someServer @ guildVaults」] = {...提取文本...}。但是,我無法使其工作,即使使用@ alecxe的解決方案,它仍然無法工作 - 因此我提供了一個實際的文件來進行一些測試。 – emihir0