替换所有捕获的组

时间:2011-07-20 12:10:14

标签: java regex capturing-group

我需要将:"foo_bar_baz_2"转换为"fooBarBaz2"

我正在尝试使用此模式:

Pattern pattern = Pattern.compile("_([a-z])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

是否可以使用matcher以大写字母将捕获的组替换为第一个捕获的组('_'后面的字母)?

3 个答案:

答案 0 :(得分:3)

是。替换为\U$1\E - 表示为Java字符串"\\U$1\\E"

只要您的正则表达式中没有其他内容,您就可以转储\E并缩短为\U$1


考虑到@ TimPietzcker的评论,你的正则表达式应该是"_([a-z0-9])"

答案 1 :(得分:3)

您可以使用匹配器的appendReplacement / appendTail方法,如下所示:

Pattern pattern = Pattern.compile("_([a-z0-9])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");

StringBuffer stringBuffer = new StringBuffer();
while(matcher.find()) {
    matcher.appendReplacement(stringBuffer, matcher.group(1).toUpperCase());
}
matcher.appendTail(stringBuffer);

System.out.println(stringBuffer.toString());

答案 2 :(得分:1)

StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
}
matcher.appendTail(sb);