2012-09-19 161 views
0

的項目我有列表:搜索字符串列表中

​​

我希望當我輸入 「IN」 得到像( 「ASDF」, 「ASDG」, 「asjk」)列表。爲此我在做:

System.Text.RegularExpressions.Regex regEx = 
     new System.Text.RegularExpressions.Regex("asr", 
     System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
List<string> str = new List<string>(); 
str.Add("asdf---US,IN"); 
str.Add("asdg---UK,IN"); 
str.Add("asjk---RU,IN"); 
str.Add("asrt---IT,DE"); 
var getArray = str.Where<string>(item => regEx.IsMatch(item)).ToList<string>(); 
str = getArray.ToList(); 

str是有正確的結果。但它包含「asdf --- US,IN」,「asdg --- UK,IN」,「asjk --- RU,IN」等整個項目。我只希望列表中的第一個四個字符,即「asdf」,「asdg」,「asjk」。我可以在什麼條件下使用lambda表達式來獲取我想要的列表?

+0

然後,你需要得到的比賽,不只是測試,它有1 – BugFinder

回答

1

如果它只能是第一個四個大字使用string.SubString

var getArray = str.Where(item => regEx.IsMatch(item)) 
        .Select(r=> r.Substring(0,4)) 
        .ToList(); 

你也並不需要與whereToList指定<string>投在你的列表中的項目都是字符串類型已經

編輯:。

如果您在再只想找與結尾的字符串「IN」你可以擺脫正則表達式,並使用string.EndsWith

var getArray = str.Where(item => item.EndsWith("IN")) 
        .Select(r=> r.Substring(0,4)) 
        .ToList(); 
+0

謝謝哈比卜,這就是我正在尋找。 – Prateek

+0

@Prateek,不客氣 – Habib

0

正則表達式應該是

.*?(?=---.*?IN) 

和查詢應該是

var getArray = str.Where<string>(item => regEx.IsMatch(item)).Select<string>(item => regEx.Match(item)).ToList<string>(); 
+0

謝謝Anirudha .. – Prateek