在Lambda函数中使用正则表达式 - C#

时间:2017-02-24 21:39:42

标签: c# regex lambda

我有一个小测试程序,它构建了List个不同的字符串,所有字符串都包含相同的格式化数字。然后我还声明了另一个列表,该列表应该包含前一个列表中每个字符串的特定数字。

我的计划是通过在lambda函数中使用正则表达式匹配来实现此目的。

每次我尝试这样做时都会出现以下错误:

enter image description here

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函数来实现这个目的吗?

3 个答案:

答案 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);