1

我编写了一个正则表达式\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) + " ");
}

所以结果是:

m p r m

以及如何使用它来制作这样的字符串

le1on ap1le st1awberry pu1pkin
4

2 回答 2

6

你可以使用这样的东西:

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

将产生您的示例输出。正则表达式将替换前面有两个非空格字符和一个单词边界的任何非空格字符。

这意味着“单词”like12345将被更改为12145因为3匹配\\S(不是空格)。

编辑: 更新了正则表达式以更好地适应修改后的问题标题,更改2i-1替换单词的第 i 个字母。

于 2013-03-06T08:56:15.547 回答
0

还有另一种访问匹配器索引的方法

像这样:

Pattern pattern = Pattern.compile("\\b\\S\\w(\\S(?=.))");
String string = "lemon apple strawberry pumpkin";
char[] c = string.toCharArray();
Matcher matcher = pattern.matcher(string);
   while (matcher.find()) {
         c[matcher.end() - 1] = '1';////// may be it's not perfect , but this way in case of you want to access the index in which the **sring** is matches with the pattern
   }
System.out.println(c);
于 2013-03-06T09:19:53.067 回答