我有一个小测试程序,它构建了List
个不同的字符串,所有字符串都包含相同的格式化数字。然后我还声明了另一个列表,该列表应该包含前一个列表中每个字符串的特定数字。
我的计划是通过在lambda函数中使用正则表达式匹配来实现此目的。
每次我尝试这样做时都会出现以下错误:
List<string> newList = new List<string>(new string[] { "MyName - v 3.7.5.0 ... CPU:",
"MyName - v ... CPU: - 1.5.7.2",
"4.21.66.2 - v ... CPU:",
" - v ... CPU: 31.522.9.0" });
Regex match = new Regex("(\\d+\\.)+\\d");
List<string> otherList = newList.FindAll(str => match.Match(str).Value);
有什么方法可以使用lambda函数来实现这个目的吗?
答案 0 :(得分:6)
你可以试试这个:
List<string> otherList = newList.Select(str => match.Match(str).Value).ToList();
顺便说一下,你的代码失败了,因为谓词期待bool
。
答案 1 :(得分:0)
您可以尝试以下方法:
var otherList = newList.Select(str => match.Match(str).Value);
FindAll需要一个谓词,所以你需要这样做:
newList.FindAll(str => match.IsMatch(str));
但是你会得到一个IEnumerable
,它包含完整的字符串,而不仅仅是你要查找的数字。
答案 2 :(得分:0)
List<string> newList = new List<string>(new string[] { "MyName - v 3.7.5.0 ... CPU:",
"MyName - v ... CPU: - 1.5.7.2",
"4.21.66.2 - v ... CPU:",
" - v ... CPU: 31.522.9.0" });
Regex match = new Regex("(\\d+\\.)+\\d");
var result = match.Matches(string.Join(" ", newList)).Cast<Match>().Select(m => m.Value);