我有清单:
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表达式中放入什么条件,以获得我想要的列表?
答案 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>();