文字列内の一致する単語を置き換えるために、Java replaceAll() メソッドを使用しています。私の場合、この単語がコンマ (,) ピリオド (.) などの隣にある場合、この単語は置き換えられません。
例:および。そして、そして; と(
これはコードです:
body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);
この文字列内のすべての単語を識別できる正規表現を教えてください。
文字列内の一致する単語を置き換えるために、Java replaceAll() メソッドを使用しています。私の場合、この単語がコンマ (,) ピリオド (.) などの隣にある場合、この単語は置き換えられません。
例:および。そして、そして; と(
これはコードです:
body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);
この文字列内のすべての単語を識別できる正規表現を教えてください。
これは、指定したとおりに行います。
(?<![.,])\b(\w+)\b(?![.,])
コンマまたはピリオドの隣にない限り、単語を検索 (およびキャプチャ) します。などの文字クラスに任意の句読点を追加するだけです[.,?(]
。
Java 文字列用にエスケープされた正規表現を次に示します。"(?<![.,])\\b(\\w+)\\b(?![.,])"
大文字と小文字を区別しない限り、次のようにCASE_INSENSITIVE
フラグを Pattern オブジェクトに渡すだけです
Pattern p = Pattern.compile(theAbovePattern, Pattern.CASE_INSENSITIVE);
特定の既知の単語に一致させたい場合は、次のようにします。
body = body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord);
あなたが探していたのは、\\b
単語の開始/終了位置を検出するために使用される (単語境界) だと思うので、コンマやドットはもはや問題ではありません。
あなたのコメントに応じたより詳細な例:
String body = "I'm going to school. ";
String knownWord = "school";
String replaceWord = "shop";
System.out.println(body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord));
上記は以下を出力します。
買い物に行きます。