2017-01-10 109 views
1

我試圖從字符串中刪除括號和括號之間的所有非數字字符,例如"hello (a1b2c3) (abc)"將變爲"hello 123"如何使用正則表達式刪除括號/括號之間的所有非數字字符?

我該如何使用正則表達式?

+0

@TheLostMind IM,這是它最終將包含正則表達式((?s)(<| \\ [| \「)。*?(> | \\] | \\}))| \\(| \\)」 – FrankK

+0

我想你可能需要一個解析器,我的原始(錯誤)答案一目瞭然,並且假設你只是想完全刪除括號內的術語 –

+0

是否還有不平衡或轉義的括號? – anubhava

回答

6

按照評論從OP有沒有不平衡或轉義引號。這裏牢記這一點是一個replaceAll方法調用來實現的是:

String repl = input.replaceAll("(?:\\D(?=[^(]*\\))|\\)\\s*)", ""); 

//=> hello 123 

使用正向前查找,我們發現所有的非數字是使用先行\\D(?=[^(]*\\))括號內,然後我們刪除)其次是可選的空間在交替。在一個更復雜的正則表達式,這比刪除多個字符,並沒有認爲這是有關這個問題的一個更大的項目中使用此

RegEx Demo

+1

多數民衆贊成它,謝謝! – FrankK

0

您可以使用splitreplaceAll來實現此目的。

public static void main(String[] args) { 
    String s = "hel121lo (a1b2c3) (abc)"; 
    String[] arr = s.split("\\s+"); 
    StringJoiner sj = new StringJoiner(" "); 
    for (String str : arr) { 
     // System.out.println(str); 
     if (str.contains("(")) { 
      String k = str.replaceAll("\\D|\\(|\\)a", ""); 
      sj.add(k); 
     } else { 
      sj.add(str); 
     } 

    } 

    System.out.println(sj.toString()); 

} 

O/P:

hel121lo 123 
相關問題