我需要将每个'\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)
答案 0 :(得分:1)
如果您想对匹配的结果执行某些操作,那么您必须使用额外的StringBuffer
和Matcher.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", "");
更有趣的情况是,您需要在替换时处理每个匹配项。在这种情况下,您应该使用appendReplacement
和appendTail
方法,它们协同工作:
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();