如何从字符串数组中删除未知格式的字符串?

时间:2012-10-24 20:08:52

标签: c# string special-characters stringcollection

我正在尝试从字符串集合中删除带有无法识别字符的字符串。实现这一目标的最佳方法是什么?

5 个答案:

答案 0 :(得分:1)

由于Array(假设string[])在删除项目时没有重新调整大小,因此无论如何都需要创建新项目。因此,ToArray()的基本LINQ过滤将为您提供新的数组。

myArray = myArray.Where(s => !ContainsSpecialCharacters(s)).ToArray();

答案 1 :(得分:1)

要删除包含您无法识别的任何字符的字符串: (EG:如果你想接受小写字母,那么" foo @ bar"将被拒绝")

  1. 创建一个正则表达式,用于定义"识别的"字符,以^开头,以$结尾。例如,如果您的"已识别"字符是大写的A到Z,它是^[A-Z]$
  2. 拒绝不匹配的字符串
  3. 注意:这对包含换行符的字符串不起作用,但如果需要支持,可以调整它

    要删除包含完全字符的字符串,您无法识别: (EG:如果你想接受小写字母,那么" foo @ bar"会被接受,因为它确实包含至少一个小写字母)

    1. 创建一个正则表达式,用于定义"识别的"字符,但方括号内有^字符,以^开头,以$结尾。例如,如果您的"已识别"字符是大写的A到Z,它是^[^A-Z]$
    2. 拒绝与之匹配的字符串

答案 2 :(得分:0)

我会查看Linq的where方法,以及包含您正在寻找的字符的regular expression。在伪代码中:

return myStringCollection.Where(!s matches regex)

答案 3 :(得分:0)

这就是你想要的。

List<string> strings = new List<string>()
{
    "one",
    "two`",
    "thr^ee",
    "four"
};

List<char> invalid_chars = new List<char>()
{
    '`', '-', '^'
};

strings.RemoveAll(s => s.Any(c => invalid_chars.Contains(c)));
strings.ForEach(s => Console.WriteLine(s));

生成输出:

one
four

答案 4 :(得分:0)

This question对我认为您正在寻找的内容有一些类似的答案。但是,我认为你想要包括所有字母,数字,空格和标点符号,但排除其他所有内容。那是准确的吗?如果是这样,这应该为你做到:

char[] arr = str.ToCharArray();

arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c) || 
                      char.IsWhiteSpace(c) || char.IsPunctuation(c))));
str = new string(arr);