2014-10-05 72 views
0

如何解析這樣形成的文本?來自文本的關聯數組

Data 
    Name of a group: 
     Name: Value 
     Name:   Value 
     Name: Value 
Data 
    Name of a group: 
     Name: Value 
    Name of a group: 
     Name: Value 
     Name:  Value 

它可以有多個Data並且每個數據可以有多個Named groups和內部他們中的每一個可以是多個Name Value雙也空格數目可以整個文本中的變化,這意味着該前第一Data可以有兩個空間並在第二次沒有。

解析後,我想能夠得到關聯數組,所以我可以以這種方式訪問​​數據data[0][Name of group][Value name]或做foreach等。這甚至可以用正則表達式的力量嗎?

+1

我不認爲這是一種常規語言(只有預感),所以我懷疑它是否可以通過正則表達式。但是,創建僅向前分析器很簡單,該分析器將文本分解爲包含零個或多個命名組的單個數據組,其中包含零個或多個名稱/值對。可以在十分鐘或更短的時間內破解它。 – Will 2014-10-05 16:44:59

+0

爲什麼不使用JSON或XML,爲什麼你的數據仍然是未知格式呢? – 2014-10-05 16:46:07

+0

@RezoMegrelidze它簡單地說明了我試圖解析的數據的樣子。我無能爲力 – Hnus 2014-10-05 17:02:38

回答

1

我認爲你可以沒有正則表達式。只需逐行掃描輸入。如果行包含字符串"Data",您將增加data_index(最初設置爲-1)。如果該行看起來像"text:",則將變量group_name設置爲text。如果該行看起來像"text_left:text_right",則將變量name設置爲text_left並執行操作data[data_index][group_name][name] = text_right

要檢查一個字符串是否爲組名,請先修剪它,然後檢查最後一個字符是否爲':'。如果它不是數據行而不是組名,則可以推斷出它是名稱/值對。

這假定輸入文件格式良好:組名總是以':'結尾,依此類推。行中的空格不重要。

+0

它發生在我身上,但我認爲用正則表達式做它會快得多,並且正常表達式存在這種類型的任務,所以你不必編寫自己的算法來解析數據。但我猜想一些簡單而且相當合適的東西會隨着你提出的解決方案而去。 – Hnus 2014-10-05 17:07:17