我已经使用了下面的正则表达式来尝试去除括号和它们中的所有内容,其名称为name
。使用正则表达式去除括号中的所有内容
name.replaceAll("\\(.*\\)", "");
由于某种原因,这是离开名称不变。我究竟做错了什么?
我已经使用了下面的正则表达式来尝试去除括号和它们中的所有内容,其名称为name
。使用正则表达式去除括号中的所有内容
name.replaceAll("\\(.*\\)", "");
由于某种原因,这是离开名称不变。我究竟做错了什么?
字符串是不可变的。你必须这样做:
name = name.replaceAll("\\(.*\\)", "");
编辑:此外,由于.*
是贪婪的,它会杀死尽可能多的,因为它可以。所以"(abc)(def)"
将变成""
。
String.replaceAll()
不编辑原始字符串,但返回新的字符串。所以,你需要做的:
name = name.replaceAll("\\(.*\\)", "");
如果你读了Javadoc for String.replaceAll()
,你会发现,它指定生成的字符串是返回值。
更一般地,String
在Java中是不可变的;他们从不改变价值。
正如Jelvis mentionend由 “*” 选择一切,并转换 “(AB)OK(光盘版)”,以 “”
以下版本的作品在这些情况下 “(AB)OK(光盘版)” - >“确定”,通过选择除了右括号和删除空格之外的所有内容。
test = test.replaceAll("\\s*\\([^\\)]*\\)\\s*", " ");
当'test =“(文本(更多文本),然后更多)”'时,这会失败。 – Saheb
我使用这个功能:
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, "()");
非常感谢你。在我的特殊应用中,我并不担心嵌套。 – Daniel
实际上,当我考虑更多时,嵌套将不会成为问题,因为'。*'默认为贪婪。真正的问题是像'(abc)(def)'这样的字符串将被完全删除。 –
在我的情况下也不是问题。永远不会有一组以上的括号。 – Daniel