我的术语可能有点出格,但我试图从 C# 中的字符串中去除非字母,因此删除破折号和符号等,但保留重音字符和汉字等内容。我在 SO 上看到的所有 C# 示例都有这样的正则表达式new Regex("[^a-zA-Z0-9 -]");
,但我的需求超出了 ascii 字符。
string input = "I- +AM. 相关 AZURÉE& /30%";
string output = "I AM 相关 AZURÉE 30";
一个好的起点是根据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}]", "");
string result = string.Concat(input.Where(c => Char.IsLetterOrDigit(c)));