2013-06-27 47 views
4

我有一個字符串列表:如何從列表中的字符串中刪除數字/數字<string>?

List<string> _words = ExtractWords(strippedHtml); 

_words包含1799個指標;在每個索引中都有一個字符串。

某些字符串只包含數字,例如:

" 2""2013"

我想刪除這些字符串,所以最終的名單將只包含字母和數字不是字符串。

"001hello"這樣的字符串是好的,但"001"不正確,應該刪除。

+0

創建一個將'string'轉換爲'char []數組'的小方法,然後如果索引包含一個數字,則用'「」替換它。 – Tdorno

回答

5

您可以使用LINQ爲:

_words = _words.Where(w => w.Any(c => !Char.IsDigit(c))).ToList(); 

這將過濾掉全部的數字由字符串,空字符串一起。

4
_words = _words.Where(w => !w.All(char.IsDigit)) 
       .ToList(); 
+0

通常,'Any()'比'!All()'更受歡迎,因爲Any可以在第一次不匹配後停止計算,而All必須評估序列的每個成員。 – neontapir

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(); 
+0

國際海事組織,正則表達式是一個矯枉過正的(小字) –

+0

取決於矯枉過正的定義。這比LINQ快。 – ctn

+0

用於思考數字之間空格的+1號 –

1

您可以使用傳統的foreachInteger.TryParse來檢測數字。 這將比正則表達式或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); 
    } 
} 
+0

這可能是最好的解決方案,如果它不需要消除像「1 2」這樣的詞。 – ctn

+0

@ctn:好點。如果你指出可能有字符串(中間有空格),那麼正則表達式可能確實是更好的方法。 –

+0

您是否對此進行過性能測試?我懷疑你是對的,這是更快,但我想知道你是否確定。 – neontapir