从List中的字符串中删除特殊字符

时间:2013-08-12 23:15:47

标签: c# linq replace

我有一个

List<string> names = new List<string>{"asa","@!","~!@#$%^tryt","asas**)_+lk"};//just an example...will be populated at run time
List<string> unsupportedCharacters = new List<string> { "~", "!", "#", "$", "%", "^", "&", "*"};

现在我想从“名称”列表中的每个字符串中删除不受支持的字符。我可以通过foreach循环来检查每个字符串,但我想知道是否有更好的方法来实现这一点?可能正在使用Linq?

问题编辑

如果我必须用一个空格字符替换不支持的字符怎么样...所以“我的@@ Naame!@ %%是~~ Foo”应该转换为“我的名字是Foo”吗?当然所有的字符串都是仍在列表“名称”

编辑2 使用Regex.Replace()

解决了它

2 个答案:

答案 0 :(得分:1)

better way。不确定。另一种方式?也许

var names = new List<string> { "asa", "@!", "~!@#$%^tryt", "asas**)_+lk" };
var unsupportedCharacters = new HashSet<char>("~!#$%^&*");

var newNames = names.Select(n => String.Join("", n.Where(c => !unsupportedCharacters.Contains(c))))
                    .ToList();

答案 1 :(得分:0)

这将为您提供所需的结果:

List<string> names = new List<string> { "asa", "@!", "~!@#$%^tryt", "asas**)_+lk" };
List<string> unsupportedCharacters = new List<string> { "~", "!", "#", "$", "%", "^", "&", "*" };
var result = names.Select(str => string.Concat(str.Split(unsupportedCharacters.ToArray(), StringSplitOptions.RemoveEmptyEntries)));