Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
アンダースコアを除くすべての特殊文字を削除するための正規表現が必要です。すべての特殊文字を置き換えることができますが、アンダースコアを保持する方法がわかりません。すべての特殊文字を削除するコードは次のとおりです。
String myname= "!john_smith@#-".replaceAll("\\p{Punct}+", "");
アンダースコアを保持するように正規表現を変更する方法はありますか?
ありがとう、パトリック
(プロパティを持たない文字の否定された文字クラス)\\p...と同じで、そこにアンダースコアを入れることもできます。[^\\P...]
\\p...
[^\\P...]
"[^\\P{Punct}_]+"
または、否定的な先読みを使用します
"(?:(?!_)\\p{Punct})+"
また、あなたの例を見ると、おそらくこれと同じくらい簡単なもので十分でしょう:
"[^\\w\\s]+"
文字、数字、アンダースコア、および空白を除くすべてを削除します。
使用セット差:
System.out.println("#%a#%^$^_#$%b#$".replaceAll("[\\p{Punct}&&[^_]]", ""));
版画
a_b
参考:文字クラス