使用正则表达式删除括号中的所有内容

我已经使用以下正则表达式尝试在名为name的字符串中删除括号及其中的所有内容。

 name.replaceAll("\\(.*\\)", ""); 

由于某种原因,这是保持名称不变。 我究竟做错了什么?

字符串是不可变的。 你必须这样做:

 name = name.replaceAll("\\(.*\\)", ""); 

编辑:此外,由于.*是贪婪的,它会尽可能多地杀死它。 所以"(abc)(def)"将变成""

正如Jelvis所提到的,“。*”选择所有内容并将“(ab)ok(cd)”转换为“”

下面的版本适用于这些情况“(ab)ok(cd)” – >“ok”,通过选择除右括号以外的所有内容并删除空格。

 test = test.replaceAll("\\s*\\([^\\)]*\\)\\s*", " "); 

String.replaceAll()不会编辑原始字符串,但会返回新字符串。 所以你需要这样做:

 name = name.replaceAll("\\(.*\\)", ""); 

如果您读取String.replaceAll()的Javadoc ,您会注意到它指定结果字符串是返回值

更一般地说, String在Java中是不可变的; 他们永远不会改变价值

我正在使用这个function:

 public static String remove_parenthesis(String input_string, String parenthesis_symbol){ // removing parenthesis and everything inside them, works for (),[] and {} if(parenthesis_symbol.contains("[]")){ return input_string.replaceAll("\\s*\\[[^\\]]*\\]\\s*", " "); }else if(parenthesis_symbol.contains("{}")){ return input_string.replaceAll("\\s*\\{[^\\}]*\\}\\s*", " "); }else{ return input_string.replaceAll("\\s*\\([^\\)]*\\)\\s*", " "); } } 

你可以这样称呼它:

 remove_parenthesis(g, "[]"); remove_parenthesis(g, "{}"); remove_parenthesis(g, "()");