2013-07-18 13 views
5

私の用語はここで少し出てくるかもしれませんが、C#の文字列から非文字を取り除こうとしていますので、アクセント付き文字や漢字。私が見たC#の例はすべてnew Regex("[^a-zA-Z0-9 -]");のような正規表現を持っていますが、私の必要性はASCII文字を超えています。c#文字列のRegex文字以外の文字

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

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

+2

'char.IsLetterOrDigit'がfalseを返す文字を取り除くのはどうですか? 'var sb = new StringBuilder();のようなものです。 foreach(入力時にvar c)if(char.IsLetterOrDigit(c))sb.Append(c); return sb.ToString(); ' - それを試していない。 – Alxandr

答えて

4

良い出発点は、彼らのUnicode character classに応じて文字を削除することです。

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}]", ""); 

See it in action

+0

+1イデオンのデモンストレーションリンクです。そのサイトはかなりクールです!良い発見! –

1
string result = string.Concat(input.Where(c => Char.IsLetterOrDigit(c))); 
関連する問題