我正在尝试从字符串集合中删除具有无法识别字符的字符串。实现这一目标的最佳方法是什么?
问问题
900 次
5 回答
1
由于 Array(假设string[]
)在删除项目时没有重新调整大小,因此无论如何您都需要创建新的。因此,基本的 LINQ 过滤ToArray()
将为您提供新数组。
myArray = myArray.Where(s => !ContainsSpecialCharacters(s)).ToArray();
于 2012-10-24T20:12:04.683 回答
1
要删除包含您不认识的任何字符的字符串:(例如:如果您想接受小写字母,则“foo@bar”将被拒绝”)
- 创建一个正则表达式,它定义了一组“已识别”字符,并以 ^ 开头并以 $ 结尾。例如,如果您的“识别”字符是大写的 A 到 Z,它会是
^[A-Z]$
- 拒绝不匹配的字符串
注意:这不适用于包含换行符的字符串,但如果您需要支持它,您可以调整它
要删除完全包含您无法识别的字符的字符串:(例如:如果您想接受小写字母,那么“foo@bar”将被接受,因为它确实包含至少一个小写字母)
- 创建一个正则表达式,它定义了一组“已识别”字符,但
^
在方括号内有一个字符,并以 ^ 开头并以 $ 结尾。例如,如果您的“识别”字符是大写的 A 到 Z,它会是^[^A-Z]$
- 拒绝匹配的字符串
于 2012-10-24T20:13:48.443 回答
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 回答