2013-07-18 30 views
5

我的术语可能在这里稍微有些出来,但我想从C#中的字符串中去除非字母,所以删除破折号&符号等,但保留重音字符和中文字符。我看到的所有C#示例都有这样的new Regex("[^a-zA-Z0-9 -]");这样的正则表达式,但我的需求超出了ascii字符。c#正则表达式来自字符串的非字母字符

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

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

+2

如何在char.IsLetterOrDigit返回false时去掉字符?像var sb = new StringBuilder(); foreach(var in input)if(char.IsLetterOrDigit(c))sb.Append(c);返回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 Ideone示范链接。该网站非常酷!好找! –

1
string result = string.Concat(input.Where(c => Char.IsLetterOrDigit(c))); 
相关问题