更换前更改结果组文本?

时间:2015-03-31 11:55:20

标签: java regex

我需要将每个'\w(space)\w'替换为'\w\w'(不含空格)。

Pattern.compile("\\w \\w").matcher("a b c d e f ...").replaceAll("$0")

我可以在' $ 0'中更改结果在替换之前分组(删除空格)?

我需要返回' ab cd ef'

更复杂的例子:

123 321 321 ... 123 number - > 123321321...123 number

通过正则表达式(\d{3} )+(number)

2 个答案:

答案 0 :(得分:1)

如果您想对匹配的结果执行某些操作,那么您必须使用额外的StringBufferMatcher.appendReplacement()方法。

然而,你也可以做到这一点:

String result = "a b c d e f".replaceAll("(\\w) (\\w)", "$1$2");

答案 1 :(得分:1)

在这个简单的情况下,每个匹配都有一个空格,因此删除空格意味着用空字符串替换。此外,String可以直接执行,如下所示:

String res = "a b c d e f ...".replaceAll("\\w \\w", "");

更有趣的情况是,您需要在替换时处理每个匹配项。在这种情况下,您应该使用appendReplacementappendTail方法,它们协同工作:

Pattern p = Pattern.compile("\\w \\w");
Matcher m = p.matcher("a b c d e f ...");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, "#");
}
m.appendTail(sb);
String result = sb.toString();