-4

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

4

5 回答 5

1

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

myArray = myArray.Where(s => !ContainsSpecialCharacters(s)).ToArray();
于 2012-10-24T20:12:04.683 回答
1

要删除包含您不认识的任何字符的字符串:(例如:如果您想接受小写字母,则“foo@bar”将被拒绝”)

  1. 创建一个正则表达式,它定义了一组“已识别”字符,并以 ^ 开头并以 $ 结尾。例如,如果您的“识别”字符是大写的 A 到 Z,它会是^[A-Z]$
  2. 拒绝不匹配的字符串

注意:这不适用于包含换行符的字符串,但如果您需要支持它,您可以调整它

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

  1. 创建一个正则表达式,它定义了一组“已识别”字符,但^在方括号内有一个字符,并以 ^ 开头并以 $ 结尾。例如,如果您的“识别”字符是大写的 A 到 Z,它会是^[^A-Z]$
  2. 拒绝匹配的字符串
于 2012-10-24T20:13:48.443 回答
0

我会查看 Linq 的where方法,以及包含您要查找的字符的正则表达式。在伪代码中:

return myStringCollection.Where(!s matches regex)
于 2012-10-24T20:16:46.923 回答
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
于 2012-10-24T20:17:12.430 回答
0

这个问题与我认为您正在寻找的内容有一些相似的答案。但是,我认为您希望包括所有字母、数字、空格和标点符号,但排除其他所有内容。那准确吗?如果是这样,这应该为你做:

char[] arr = str.ToCharArray();

arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c) || 
                      char.IsWhiteSpace(c) || char.IsPunctuation(c))));
str = new string(arr);
于 2012-10-24T20:48:43.933 回答