我的术语可能有点在这里,但我试图从C#中的字符串中删除非字母,所以删除破折号&符号等,但保留重音字符和中文字符之类的东西。我在SO上看到的所有C#示例都有一个像new Regex("[^a-zA-Z0-9 -]");
这样的正则表达式,但我的需求超出了ascii字符。
string input = "I- +AM. 相关 AZURÉE& /30%";
string output = "I AM 相关 AZURÉE 30";
答案 0 :(得分: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 强>
答案 1 :(得分:1)
string result = string.Concat(input.Where(c => Char.IsLetterOrDigit(c)));