2

アンダースコアを除くすべての特殊文字を削除するための正規表現が必要です。すべての特殊文字を置き換えることができますが、アンダースコアを保持する方法がわかりません。すべての特殊文字を削除するコードは次のとおりです。

String myname= "!john_smith@#-".replaceAll("\\p{Punct}+", "");

アンダースコアを保持するように正規表現を変更する方法はありますか?

ありがとう、パトリック

4

2 に答える 2

12

(プロパティを持たない文字の否定された文字クラス)\\p...と同じで、そこにアンダースコアを入れることもできます。[^\\P...]

"[^\\P{Punct}_]+"

または、否定的な先読みを使用します

"(?:(?!_)\\p{Punct})+"

また、あなたの例を見ると、おそらくこれと同じくらい簡単なもので十分でしょう:

"[^\\w\\s]+"

文字、数字、アンダースコア、および空白を除くすべてを削除します。

于 2012-11-21T14:03:13.957 に答える
6

使用セット差:

System.out.println("#%a#%^$^_#$%b#$".replaceAll("[\\p{Punct}&&[^_]]", ""));

版画

a_b

参考:文字クラス

于 2012-11-21T14:02:26.893 に答える