我的术语可能在这里稍微有些出来,但我想从C#中的字符串中去除非字母,所以删除破折号&符号等,但保留重音字符和中文字符。我看到的所有C#示例都有这样的new Regex("[^a-zA-Z0-9 -]");
这样的正则表达式,但我的需求超出了ascii字符。c#正则表达式来自字符串的非字母字符
string input = "I- +AM. 相关 AZURÉE& /30%";
string output = "I AM 相关 AZURÉE 30";
我的术语可能在这里稍微有些出来,但我想从C#中的字符串中去除非字母,所以删除破折号&符号等,但保留重音字符和中文字符。我看到的所有C#示例都有这样的new Regex("[^a-zA-Z0-9 -]");
这样的正则表达式,但我的需求超出了ascii字符。c#正则表达式来自字符串的非字母字符
string input = "I- +AM. 相关 AZURÉE& /30%";
string output = "I AM 相关 AZURÉE 30";
一个很好的出发点是根据自己的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}]", "");
+1 Ideone示范链接。该网站非常酷!好找! –
string result = string.Concat(input.Where(c => Char.IsLetterOrDigit(c)));
如何在char.IsLetterOrDigit返回false时去掉字符?像var sb = new StringBuilder(); foreach(var in input)if(char.IsLetterOrDigit(c))sb.Append(c);返回sb.ToString();' - 虽然没有尝试过。 – Alxandr