我有一个字符串列表:
List<string> _words = ExtractWords(strippedHtml);
_words
包含1799个索引;在每个索引中都有一个字符串。
有些字符串只包含数字,例如:
" 2"
或"2013"
我想删除这些字符串,因此最后List只包含字母而不是数字的字符串。
"001hello"
之类的字符串可以,但"001"
不正常,应删除。
答案 0 :(得分:6)
您可以使用LINQ:
_words = _words.Where(w => w.Any(c => !Char.IsDigit(c))).ToList();
这将过滤掉完全由数字组成的字符串以及空字符串。
答案 1 :(得分:4)
_words = _words.Where(w => !w.All(char.IsDigit))
.ToList();
答案 2 :(得分:2)
删除仅由数字和空白组成的单词:
var good = new List<string>();
var _regex = new Regex(@"^[\d\s]*$");
foreach (var s in _words) {
if (!_regex.Match(s).Success)
good.Add(s);
}
如果你想使用这样的LINQ应该这样做:
_words = _words.Where(w => w.Any(c => !char.IsDigit(c) && !char.IsWhiteSpace(c)))
.ToList();
答案 3 :(得分:1)
您可以使用传统的foreach
和Integer.TryParse
来检测数字。
这将比Regex或LINQ更快。
var stringsWithoutNumbers = new List<string>();
foreach (var str in _words)
{
int n;
bool isNumeric = int.TryParse(str, out n);
if (!isNumeric)
{
stringsWithoutNumbers.Add(str);
}
}