我有一个字符串,我想摆脱括号
这是我的字符串"(name)"
我想得到"name"
没有括号的同样的事情
我有String s = "(name)";
s = s.replaceAll("(","");
s = s.replaceAll(")","");
我得到了一个例外
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 1
(
如何摆脱括号?
答案 0 :(得分:7)
括号字符(
和)
分隔正则表达式中capturing group的边界,该表达式用作replaceAll
中的第一个参数。角色需要转义。
s = s.replaceAll("\\(","");
s = s.replaceAll("\\)","");
更好的是,你可以简单地将括号放在character class中以防止字符被解释为元字符
s = s.replaceAll("[()]","");
答案 1 :(得分:4)
s = s.replace("(", "").replace(")", "");
这里不需要正则表达式。
如果您想使用正则表达式(不知道为什么会这样),您可以这样做:
s = s.replaceAll("\\(", "").replaceAll("\\)", "");
问题是(
和)
是元字符,因此您需要将它们转义(假设您希望它们被解释为它们的显示方式)。
答案 2 :(得分:3)
String#replaceAll将正则表达式作为参数。
您正在使用Grouping Meta-characters
作为正则表达式参数。这就是获取错误的原因。
元字符用于对模式进行分组,划分和执行特殊操作。
\ Escape the next meta-character (it becomes a normal/literal character) ^ Match the beginning of the line . Match any character (except newline) $ Match the end of the line (or before newline at the end) | Alternation (‘or’ statement) () Grouping [] Custom character class
所以使用
1。\\(
代替(
2. \\)
而不是)
答案 3 :(得分:2)
你需要像这样转义括号:
s = s.replaceAll("\\(","");
s = s.replaceAll("\\)","");
你需要两个斜杠,因为正则表达式处理引擎需要看\(
来将括号作为文字括号处理(而不是正则表达式的一部分),你需要转义反斜杠因此正则表达式引擎可以将其视为反斜杠。
答案 4 :(得分:1)
你需要逃避(和)它们有特殊的字符串字面含义。 这样做:
s = s.replaceAll("\\(","");
s = s.replaceAll("\\)","");
答案 5 :(得分:1)
s=s.replace("(","").replace(")","");