2016-12-29 31 views
3

我遇到了以下問題。我想刪除所有子<結束與>開始除了的子<back>用Java中的RegExp替換除了一個以外的所有標記

例如:<apps> <up> <down> <capital> ...應該被刪除,但不是<back>

我相信這可以與正則表達式String.replace(),但我不知道如何。

目前,我已經想通了這一點:

line = line.replaceAll("<[^<]*>", ""); 

問題是,這還會刪除<back> -substring!

我希望你們中有人知道解決方案。

感謝您的幫助!

回答

4

可以使用(?!<back>)<[^<]*>line = line.replaceAll("(?!<back>)<[^<]*>", "");

(?!<back>)不匹配的標籤<back>

RegEx Demo

+0

'(?!''解決方案將不匹配那些'*'字符串,它有一個* *開頭*'返回' –

+0

@WiktorStribiżew謝謝,我已經改進了它並且只是寫描述,讓我點擊以顯示 –

+0

謝謝大家的快速回答,這個更好用,第一個刪除了其他字符。RegExp-Demo真的很有幫助! –

3

使用負前瞻:

line = line.replaceAll("<(?!back>)[^<>]*>", ""); 
         ^^^^^^^^^ 

regex demo

的模式匹配:

  • < - 所述<符號
  • (?!back>) - 後面沒有與back>(該負先行,作爲一個零寬度斷言,僅檢查文本向右當前位置,但文本沒有被消耗)
  • [^<>]* - 比>其他零個或多個字符<
  • > - 一個>符號。
+0

沒有這個解決方案中刪除哪些字符(提前負的樣子)?我只更新了匹配從'<'到最近的'<''不包括'<' and '>'。 –

+0

@Michael Gierer看看這裏的更新 –

相關問題