2017-01-10 169 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 
相关问题