31

単語間のスペースを除いて、段落からすべての英数字以外の文字を削除する正規表現をJavaで作成しようとしています。

これは私が書いたコードです:

paragraphInformation = paragraphInformation.replaceAll("[^a-zA-Z0-9\s]", "");

ただし、コンパイラは、sが不正なエスケープ文字であることを示すエラーメッセージを表示しました。正規表現の最後に\sを追加する前に、プログラムは正常にコンパイルされましたが、問題は、段落内の単語間のスペースが削除されたことです。

このエラーを修正するにはどうすればよいですか?

4

5 に答える 5

52

キャラクターをダブルエスケープする必要があります\"[^a-zA-Z0-9\\s]"

JavaはJava文字列エスケープ文字として解釈しますが\s、これは実際には無効なJavaエスケープです。と書くこと\\で、文字をエスケープし、基本的に1文字を正規表現に\送信します。\これ\は、正規表現のエスケープ文字の一部になり\sます。

于 2012-08-03T13:48:10.757 に答える
12

正規表現が\sを認識するように、\をエスケープする必要があります。

paragraphInformation = paragraphInformation.replaceAll("[^a-zA-Z0-9\\s]", "");
于 2012-08-03T13:49:10.003 に答える
4

ビクトリア、ここに書いてはいけませ\\s\s

于 2012-08-03T13:48:16.997 に答える
4

通常、そのエラーが表示される場合は常に、2つ必要な場合にバックスラッシュが1つしかないことを意味します。

paragraphInformation = paragraphInformation.replaceAll("[^a-zA-Z0-9\\s]", "");
于 2012-08-03T13:48:33.243 に答える
1

このサイトをご覧ください。JavaRegexをオンラインでテストし、適切にフォーマットされたregex文字列パターンを取り戻すことができます。

http://www.regexplanet.com/advanced/java/index.html

于 2014-08-13T13:41:42.490 に答える