5

私の用語は少し外れているかもしれませんが、C# の文字列から非文字を削除しようとしているので、ダッシュ、アンパサンドなどを削除しますが、アクセント付きの文字や漢字などは保持します。私が SO で見たすべての C# の例には、このような正規表現がありnew Regex("[^a-zA-Z0-9 -]");ますが、私のニーズは ASCII 文字を超えています。

string input = "I- +AM. 相关 AZURÉE& /30%";

string output = "I AM 相关 AZURÉE 30";

4

2 に答える 2

4

良い出発点は、 Unicode 文字クラスに従って文字を削除することです。たとえば、次のコードは、句読点、記号、または制御文字として特徴付けられるものをすべて削除します。

string input = "I- +AM. 相关 AZURÉE& /30%";
var output = Regex.Replace(input, "[\\p{S}\\p{C}\\p{P}]", "");

特定のクラスのみを許可することで、ホワイトリスト アプローチを試すこともできます。たとえば、これは、文字、分音記号、数字、およびスペースである文字のみを保持します。

var output = Regex.Replace(input, "[^\\p{L}\\p{M}\\p{N}\\p{Z}]", "");

実際に見てください

于 2013-07-18T11:48:40.830 に答える