如何从字符串中剥离非ascii字符?(c#)


当前回答

我相信MonsCamus的意思是:

parsememo = Regex.Replace(parsememo, @"[^\u0020-\u007E]", string.Empty);

其他回答

我用了这个正则表达式:

    string s = "søme string";
    Regex regex = new Regex(@"[^a-zA-Z0-9\s]", (RegexOptions)0);
    return regex.Replace(s, "");

不需要正则表达式。只要使用编码…

sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));

如果你不想剥离,而是真正地将拉丁重音字符转换为非重音字符,看看这个问题:我如何将8位字符转换为7位字符?(即Ü到U)

string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);

^是not运算符。它告诉正则表达式去查找所有不匹配的,而不是所有匹配的。\u####-\u####表示匹配的字符。\u0000-\u007F相当于utf-8或unicode中的前128个字符,这些字符总是ascii字符。因此,您匹配每个非ascii字符(因为not),并对所有匹配的字符进行替换。

(正如Gordon Tucker在2009年12月11日21:11的评论中所解释的那样)

我使用这个正则表达式来过滤掉文件名中的坏字符。

Regex.Replace(directory, "[^a-zA-Z0-9\\:_\- ]", "")

这应该是文件名所允许的所有字符。