2017-06-14 211 views
-4

我有一個XML輸出如下所示正則表達式來結合標籤

<B-company> The British </B-company> <I-company> Broadcasting Corporation is a </I-company> <B-Type> public </B-Type> <I-Type> service broadcaster </I-Type> <HQ> headquartered </HQ> <B-company> at </B-company> <I-company> Broadcasting </I-company> <B-Type> House </B-Type> <I-Type> in </I-Type> <HQ> London </HQ> 

這裏B-tag爲開始標籤和I-標籤顯示延續標籤/結束標記(如果沒有進一步的I-標籤被找到)。

我期待這樣的事情作爲一個輸出

<company> The British Broadcasting Corporation is a </company> <Type> public service broadcaster </Type> <HQ> headquartered </HQ> <company> at Broadcasting </company> <Type> House in </Type> <HQ> London </HQ> 

即字符「B-」需要從這樣的第一標籤形成和所有的標籤被刪除,直到我們有「/ I-」標記並添加到最後。我們如何在java正則表達式中實現這一點。

+1

[使用XML解析器代替?](https://stackoverflow.com/a/1732454/2773311)關於使用正則表達式解析XML/HTML ... – Arc676

+1

@ Arc676它很難被稱爲「解析」,如果輸出是xml。這些看起來像基本的字符串操作,只是字符串恰好是xml。 –

+1

@Rawing,你是對的。它只是用一些標籤編碼的基本字符串。它不遵循正常的XML約定。對我來說,使用XML解析器似乎對此有點矯枉過正。因此,正則表達式的方法 – Betafish

回答

1

你可以試試這個正則表達式:

</[BI]-(\w+)>\s*<I-\1>|(</?)[BI]-(\w+>) 

\2\3取代。

Online demo.


做些什麼:

</[BI]-(\w+)>\s*<I-\1>關閉標籤緊跟一個延續標籤相匹配。這些文本都沒有在第2或第3組中被捕獲,因此所有與此匹配的文本都將被刪除。

(</?)[BI]-(\w+>)然後匹配以B-I-開頭的其餘標籤。它捕獲組2和組3中的B-I-周圍的文本,所以通過替換\2\3,可以有效地刪除B-I-

+0

在線演示網站幫助了很多。這是我正在尋求解釋我的天真正則表達式技能。 – Betafish