Java 是否在替换前更改结果组文本?
我需要将每个Java 是否在替换前更改结果组文本?,java,regex,Java,Regex,我需要将每个'\w(空格)\w'替换为'\w\w'(不带空格) 在替换之前,我是否可以更改“$0”组中的结果(删除空格) 我需要返回“ab cd ef” 更复杂的示例: 123321321。。。123号码->123321321…123号码 通过正则表达式(\d{3})+(number)如果要对匹配的结果执行某些操作,则必须使用额外的StringBuffer,以及Matcher.appendReplacement()方法 但是,您也可以实现这一点: String result = "a b c d
'\w(空格)\w'
替换为'\w\w'
(不带空格)
在替换之前,我是否可以更改“$0”组中的结果(删除空格)
我需要返回“ab cd ef”
更复杂的示例:
123321321。。。123号码
->123321321…123号码
通过正则表达式
(\d{3})+(number)
如果要对匹配的结果执行某些操作,则必须使用额外的StringBuffer
,以及Matcher.appendReplacement()
方法
但是,您也可以实现这一点:
String result = "a b c d e f".replaceAll("(\\w) (\\w)", "$1$2");
在这个简单的例子中,每个匹配项都有一个空格,因此删除空格意味着替换为一个空字符串。而且,
String
可以直接执行,如下所示:
String res = "a b c d e f ...".replaceAll("\\w \\w", "");
一个更有趣的情况是,您需要像处理替换一样处理每个匹配。在这种情况下,您应该使用和方法,这两种方法协同工作:
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();
你的代码片段返回'abcdef',但我需要'ab cd ef'@wtrclr更新答案。它可以工作,但如果我需要转换每个'123 231。。。123号'至123231…123号'。我不知道三人一组的人数。表达式:
(\d{3})+number
删除或留下空格的规则是什么?只删除数字块之间的空格。这与您以前的要求不符,其中“a b c d e f”
应该变成“ab cd ef”
。
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();