5

我的术语可能有点出格,但我试图从 C# 中的字符串中去除非字母,因此删除破折号和符号等,但保留重音字符和汉字等内容。我在 SO 上看到的所有 C# 示例都有这样的正则表达式new Regex("[^a-zA-Z0-9 -]");,但我的需求超出了 ascii 字符。

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

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

4

2 回答 2

4

一个好的起点是根据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}]", "");

看到它在行动

于 2013-07-18T11:48:40.830 回答
1
string result = string.Concat(input.Where(c => Char.IsLetterOrDigit(c)));
于 2013-07-18T11:58:06.923 回答