[1]、[2]、[3]などの単語を含むテキストがあります...
例:現代美術と写真の常設[1]コレクションと一時的[2]展示の両方を収容します。[6]
これらの単語を削除したいので、文字列は次のようになります。
例:現代アートと写真の常設コレクションと一時的な展示の両方を収容しています。
を使用してみましs = s.replaceAll("[.*]", "");
たが、テキストからドット(。)を削除するだけです。
Wichはそれを達成するための正しい方法ですか?
ありがとう
[
と]
は正規表現マーカーだからです。これは機能するはずです:
s = s.replaceAll("\\[\\d+\\]","");
(常に内に数字があると仮定します[]
)。
任意の文字である可能性がある場合:
s = s.replaceAll("\\[.*?\\]","");
(@PeterLawreyに感謝します)。
使用する:
s.replaceAll("\\[[^]]+\\]", "")
[
と]
は正規表現で特別であり、文字クラスの区切り文字であるため、それらをエスケープする必要があります。元の正規表現は、ドットまたはスターのいずれかを探しているキャラクタークラスでした。
ステップ1:より良い(より安全な)パターンを取得します。あなたの現在のものは、あなたがそれを書かれたように機能させたとしても、おそらくあなたの文字列のほとんどを削除するでしょう。できるだけ具体的なものを目指してください。これは実行する必要があります(間に数字がある角かっこのみに一致します)。
[\d+]
ステップ2:特別な正規表現文字をエスケープします。[]
正規表現構文(文字クラス)では特別な意味があるため、エスケープする必要があります。
\[\d+\]
ステップ3:文字列リテラルをエスケープします。\
文字列リテラル(エスケープ文字)では特別な意味があるため、エスケープも必要です。
"\\[\\d+\\]"
そして今、私たちはいくつかのうまく機能するコードを持っているはずです。
s = s.replaceAll("\\[\\d+\\]", "");
試す:
public class StringTest {
public static void main(String args[]){
String str = "houses both permanent[1] collections and temporary[2] exhibitions of contemporary art and photography.[6]";
String patten = str.replaceAll("\\[[0-9]*]", "");
System.out.println(patten);
}
}
出力:
現代アートと写真の常設コレクションと一時的な展示の両方を収容しています。