【发布时间】:2019-11-11 07:45:42
【问题描述】:
有什么办法可以简化下面的代码,让它看起来更清晰、更优雅?
以下代码使用 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 利用率不是问题。
【问题讨论】:
-
为什么不对你的正则表达式进行编码,这样它就不会选择带有括号的匹配项,或者使用括号的存在来确定哪个第一个先验值作为匹配集合值返回?这个问题将受益于您的原始数据样本,其中突出显示您想要从中提取哪些数据
-
@CaiusJard 相信我,你不想看到原始数据,它比 html 更糟糕,它基本上是服务器生成的非常神秘的日志。但是该算法仍然非常有效:正则表达式在满足条件之前找到的最后一个数字。
-
如果我不想看,我就不会问了 ;)
-
如果你坚持:) ...这是一个块:reactid="17"/>2,941.7616.84(12.7)