在List项中搜索substring

时间:2012-09-19 07:20:18

标签: c# list lambda

我有清单:

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");

当我输入“IN”时,我希望得到List(“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表达式中放入什么条件,以获得我想要的列表?

2 个答案:

答案 0 :(得分:1)

如果它只是前四个字符使用string.SubString

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

您也无需使用<string>where指定ToList演员。列表中的项目已经是字符串类型。

编辑:

如果您只是寻找那些以“IN”结尾的字符串,您可以摆脱正则表达式并使用string.EndsWith

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

答案 1 :(得分:0)

正则表达式应该是

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

,查询应为

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