如何从字符串中删除除字母数字字符以外的所有字符

时间:2014-12-02 13:59:29

标签: c# regex

我正在尝试从以下字符串中删除所有特殊字符:

abc // t?% ?? ttt ,. y  Ä Ö Ü ä, ö !

使用正则表达式:

Regex rgx = new Regex("[^a-zA-Z0-9 -]");

但是这个正则表达式也会移除Ä Ö Ü ä, ö,但我想保留这些字符。 我只想删除像!@#$%^&,;:'....

这样的字符

2 个答案:

答案 0 :(得分:7)

\p{L}添加到否定字符类中,而不是a-zA-Z\p{L}匹配任何语言的任何类型的字母。通过将此添加到否定字符类,将匹配任何字符,但不匹配字母。

@"[^\p{L}0-9 -]"

DEMO

string str = "abc // t?% ?? ttt ,. y  Ä Ö Ü ä, ö !";
string result = Regex.Replace(str, @"[^\p{L}0-9 -]", "");
Console.WriteLine(result);
Console.ReadLine();

输出:

abc  t  ttt  y  Ä Ö Ü ä ö 

IDEONE

答案 1 :(得分:1)

Func<char, bool> filter = ch => char.IsLetterOrDigit(ch) ||
                                char.IsWhiteSpace(ch) ||
                                ch == '-';

var abc = new string(str.Where(filter).ToArray());

小提琴:https://dotnetfiddle.net/MBRsPX