1

\b\S\w(\S(?=.))単語内の3つおきの記号を検索し、それを「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")

サンプル出力を生成します。正規表現は、2つの非スペース文字とその後の単語境界が前に付いた非スペース文字を置き換えます。

これは、 (スペースではなく)によって一致するため、のような「単語」12345がに変更されることを意味します。121453\\S

編集: 改訂された質問のタイトルに対応するために正規表現を更新し、単語のi番目の文字を置き換えるように変更2しました。i-1

于 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 に答える