文字列のstr_in = "instance (\\w+\\s+){0,8}deleted";
場合、replaceAll関数を使用してインスタンスを抽出して削除するにはどうすればよいですか?
試しstr_in = str_in.replaceAll("(\\w+\\s+){0,8}", "");
ましたが、うまくいきませんでした。
文字列のstr_in = "instance (\\w+\\s+){0,8}deleted";
場合、replaceAll関数を使用してインスタンスを抽出して削除するにはどうすればよいですか?
試しstr_in = str_in.replaceAll("(\\w+\\s+){0,8}", "");
ましたが、うまくいきませんでした。
単一の文字をエスケープして、正規表現の性質を失う必要があります。
str_in.replaceAll("\\(\\\\w\\+\\\\s\\+\\)\\{0,8\\}", "")
文字列リテラルのため、エスケープするバックスラッシュはそれぞれエスケープする必要があります。
あなたの質問が述べているreplaceAll()
ように、(私の意見ではより適切な) の代わりに本当に使用したい場合は、とマーカーをreplace()
使用して文字列を文字通り一致させることができます。\Q
\E
String str_in = "instance (\\w+\\s+){0,8}deleted";
System.out.println(str_in.replaceAll("\\Q(\\w+\\s+){0,8}\\E", ""));
版画
instance deleted
使用するstr_in.replace("(\\w+\\s+){0,8}", "");
リテラル ターゲット シーケンスに一致するこの文字列の各部分文字列を、指定されたリテラル置換シーケンスに置き換えます。置換は文字列の最初から最後まで行われます。たとえば、文字列「aaa」の「aa」を「b」に置き換えると、「ab」ではなく「ba」になります。
指定された正規表現に一致するこの文字列の各部分文字列を指定された置換で置き換えます
それ(\\w+\\s+){0,8}
は文字通り文字列の中にあり、それを削除したいということですか? \
正規表現の一部としてではなく、文字どおりに解釈されるように、replaceAll でそれぞれをもう一度エスケープする必要があり(
ます{
。