2012-09-19 122 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