2013-12-10 86 views
1

一個簡單的問題,我無法找到任何類似的例子,不建議使用外部庫,我有一個練習,我們有模擬數據類似於HTML/XML,我們被限制只使用Java正則表達式庫解析和操縱它。 我們想要將數據轉換爲地圖。格式爲:基本正則表達式練習

<key> data words here </key>... 

...其中每個數據字將被添加到單獨的鍵映射,所以生成的地圖應該是這樣的:

{key, data 
key, words 
key, here} 

我來了一些解決方案首先使用正則表達式找到並存儲密鑰,然後匹配密鑰標籤的內部,將該數據存儲在字符串中,使用空格和括號分隔符對其進行標記,然後遍歷結果列表以寫入地圖。有沒有一種更直接或優雅的方法來做到這一點,我可以使用正則表達式捕獲關鍵字和數據字的數組/列表,並消除使用標記器?

下面一些示例數據(注意有沒有嵌套的標籤,這使得這要比解析HTML簡單):

<author> A. Cau, R. Kuiper, and W.-P. de Roever. </author> 
<title> Formalising Dijkstra's development strategy within Stark's formalism. </title> 
<editor> In C. B. Jones, R. C. Shaw, and T. Denvir, editors, </editor> 
<booktitle> Proc. 5th. BCS-FACS Refinement Workshop, </booktitle> 
<date> 1992. </date> 

(全部在一行 - 換行增加了可讀性)

+0

你現在在用什麼?也許我們可以看看簡化它? – brandonscript

回答

1

如果我正確理解,下面的正則表達式捕獲標籤的名稱及其組\1\2值:

<([^>/]+)>(.*?)</\1> 

EXPLAINED

< - 比賽<字面上

([^>/]+) - 匹配和捕獲的一切,是不是>/從而避免了關閉標籤

> - 比賽>字面上

(.*?) - 火柴非貪婪地捕捉任何東西

</\1> - 比賽結束標記

+0

這是我所尋找的更多,但我想我不知道如何多個捕獲工作。這將返回一個二維數組而不是一個常規數組,就像一次捕獲一樣?如果我使用多個標籤在一行上運行正則表達式,它將首先是[0] [0]第一個標籤,[0] [1]第二個標籤,[1] [0]第一個數據,[1] [1]秒標籤數據等? – Gadesxion