c# - 在满足条件之前查找值

标签 c# regex linq

有没有办法简化下面的代码,让它看起来更清晰、更优雅?

以下代码使用 Linq 和正则表达式返回在文本集合中找到的值集合:

IEnumerable<double> _results = pages.Select(result => {
    Regex _regex = new Regex("<my regex here>", RegexOptions.None);
    MatchCollection _matches = _regex.Matches(result);
    double _number = 0.0;

    foreach (Match _match in _matches) {
        if (_match.Groups["value"].Value.Contains("("))
            break;
        else
           double.TryParse(_match.Groups["value"].Value, out _number);
    }

    return _number;
});

如您所见,正则表达式很棘手,它基本上返回在满足条件之前在每个文本中找到的最后一个值,这就是所需的结果。

如何简化以前的代码以寻求优雅?内存和 CPU 利用率不是问题。

最佳答案

我会这样做,如果我正确理解您的代码,此语法在 C#7.0 中有效,带有内联 out 变量声明:

Regex _regex = new Regex("<my regex here>", RegexOptions.None);

IEnumerable<double> _results = pages.Select(_regex.Matches)
 .Where(match => !match.Groups["Value"].Value.Contains("("))
 .Select(match => double.TryParse(match.Groups["Value"].Value, out double number) ? number : number);

关于c# - 在满足条件之前查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56822340/

相关文章:

在用 OR 连接的 where 子句中使用动态谓词的 linq 查询

c# - 将 SQL 转换为 Linq 查询

mysql - 如何只获取列表中指定的项目?

c# - 来自 MSDN 杂志的关于 TCP 异步服务器的问题

c# - WPF 创建自定义事件

c# - 如何按名称查找 bindingSource?

c# - 如何基于 DropDownList 选择验证具有 RegularExpression 的 TextBox?

javascript - 我试图匹配字符串中的所有分数,但使用正则表达式时出现此错误

Python正则表达式可选组与捕获组不起作用

python - 识别正则表达式中的新行