Java Regex用于更改字符串中每个单词的每个第i个索引

ran*_*m86 1 java regex

我写了一个正则表达式\b\S\w(\S(?=.))来查找单词中的每个第三个符号,并将其替换为"1".现在我正在尝试使用这个表达式,但实际上不知道如何正确使用它.

Pattern pattern = Pattern.compile("\\b\\S\\w(\\S(?=.))");
Matcher matcher = pattern.matcher("lemon apple strawberry pumpkin");

while (matcher.find()) {
    System.out.print(matcher.group(1) + " ");
}
Run Code Online (Sandbox Code Playgroud)

结果是:

m p r m
Run Code Online (Sandbox Code Playgroud)

我怎么能用它来制作这样的字符串呢

le1on ap1le st1awberry pu1pkin
Run Code Online (Sandbox Code Playgroud)

rva*_*vik 6

你可以使用这样的东西:

"lemon apple strawberry pumpkin".replaceAll("(?<=\\b\\S{2})\\S", "1")
Run Code Online (Sandbox Code Playgroud)

会产生你的示例输出.正则表达式将替换前面有两个非空格字符然后是单词边界的任何非空格字符.

这意味着"单词" 12345会被改变为,12145因为3匹配\\S(不是空格).

编辑: 更新了正则表达式来更好地满足修订后的问题的标题,改变2i-1替换的单词的第i个字母.