我在replaceAll方法中使用了Pattern作为参数,我想删除open和close括号内的所有字符(包括括号字符)但是只有chars里面的字符被删除,括号仍然存在。下面是我的java代码
String test = "This is my test ( inside the brackets ) and finish here";
String regex = "\\(.*\\)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(test);
String out = test.replaceAll(matcher.group(), "");
System.out.println(out);
输出为This is my test () and finish here.
答案 0 :(得分:3)
要与Pattern
一起使用,您需要使用Matcher#replaceAll
而不是String#replaceAll
:
String test = "This is my test ( inside the brackets ) and finish here";
String regex = "(?<=\\().*?(?=\\))";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(test);
String out = matcher.replaceAll("");
System.out.println(out);
//=> This is my test () and finish here
PS:您还需要更改输出的正则表达式。
答案 1 :(得分:1)
您无法从该代码中获得该结果。如果您未在匹配器上拨打find()
,则在致电group()
时会收到例外情况。但是,如果您执行首先调用find()
,group()
将返回字符串( inside the brackets )
,这将被视为正则表达式,这意味着括号将被视为元字符。因此它将匹配inside the brackets
(包括前导和尾随空格,但不包括括号)。这可以解释你的输出。
修复方法是调用matcher.replaceAll("")
而不是test.replaceAll(matcher.group(), "")
。并且不要打电话给matcher.find()
。 ;)
答案 2 :(得分:0)
尝试,
String test = "This is my test ( inside the brackets ) and finish here";
System.out.println(test.replaceAll("\\(.*\\)", ""));
String.replaceAll()
的第一个参数是正则表达式