2017-06-14 20 views
0

比方說,我有一個XML字符串<tagA>許多OCCURENCES:Java的替代正則表達式的所有出現的與另一個正則表達式

String example = " (...) some xml here (...) 
        <tagA>283940</tagA> 
        (...) some xml here (...) 
        <tagA>& 9940</tagA> 
        <tagA>- 99440</tagA> 
        <tagA>< 99440</tagA> 
        <tagA>99440</tagA> 
        (...) more xml here (...) " 

內容應該只包含數字,但它也有一個隨機字符後跟一個空格和數字。 我想刪除不需要的字符和空格。怎麼做?

到目前爲止,我知道我應該尋找一個正則表達式"<tagA>. [0-9]*<\/tagA>",但我被困在這裏。

我想更換,因爲這些字符中的人物有「&」,「>」,「<」的跡象,這使得該XML無效的(這讓我無法治療這種爲XML)。

+2

[不要使用正則表達式解析XML(https://stackoverflow.com/questions/701166/can-you-provide-some-examples-of-why -it-is-hard-to-parse-xml-and-html-with-a-reg) – VGR

+1

在謂詞中使用XPath和'starts-with'函數。 –

+1

我無法解析XML,因爲它無效。 (&字符使xml無效) – Simon

回答

2

你正在尋找的正則表達式是: <(\w+)>(\D{0,})(\d+)

在搜索Group 1你會得到的TAG,在Group 2你會得到你怪異的東西(的一切,是不是一個數字)並在Group 3有數字。

有這個表達式可能在更多的情況下工作的「加強版」:(\w{0,})(<\w+>)(\D{0,})(\d+)(\D{0,})(<\/\w+>)(\w{0,})

這將在Group 1可能是標籤之前的任何空白的地方。 Group 7將照顧最後的空白。 Group 2 and 6將匹配開始標記和結束標記。 Group 3 and 5將匹配您的值之間可能存在的任何奇怪的字符。 Group 4將包含您的價值。

使用String :: replaceAll,您可以通過僅打印組2,4和6來過濾和消毒,除去其餘部分。

//input data 
String s = "<tagA>283940</tagA>\n" + 
"     <tagA>& 9940<</tagA>\n" + 
"     <tagA>- 99440</tagA>\n" + 
"     <tagA>< 99440</tagA>\n" + 
"     <tagA>99440</tagA>" 
       + "<13243> asdfasdf </>"; 


    String replaced = s.replaceAll("(\\s{0,})(<\\w+>)(\\D{0,})(\\d+)(\\D{0,})(<\\/\\w+>)(\\s{0,})", "$2$4$6"); 
    System.out.println(replaced); 

輸出:<tagA>283940</tagA><tagA>9940</tagA><tagA>99440</tagA><tagA>99440</tagA><tagA>99440</tagA><13243> asdfasdf </>

相關問題