0

我有清单:

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”时,我想获得类似(“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 表达式中放入什么条件来获得我想要的列表?

4

2 回答 2

1

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

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

您也不需要<string>使用whereand指定强制转换ToList。列表中的项目已经是字符串类型。

编辑:

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

var getArray = str.Where(item => item.EndsWith("IN"))
                  .Select(r=> r.Substring(0,4))
                  .ToList();
于 2012-09-19T07:22:37.630 回答
0

正则表达式应该是

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

并且查询应该是

var getArray = str.Where<string>(item => regEx.IsMatch(item)).Select<string>(item => regEx.Match(item)).ToList<string>();
于 2012-09-19T07:25:12.317 回答