我有个判断力
Regex.Match(result, @"\b(?<=Pay Rate)(\D*)(\d+(?:\.\d+)?)");这个很好,但是只有在只有一个速率的情况下才能工作。它只抓住了第一个,这是很好的,因为当工资率只有一个比率,这是完美的工作。然而,有一种可能性,工资率可以有多个费率。例如,
工资率: 12.12%,13.13%,14.14%,15.15% (我不知道,它可以持续不断)。所以当有超过1的比率时,我只想得到最高的比率(总是小数点2位)。当只有一个的时候,把第一个打印出来。
发布于 2021-06-26 06:47:24
可以通过使用lambda表达式来实现。
var payRate = "12.12% 13.13% 14.14% 15.15% 10.10%";
var splitPayRate = payRate.Split(new char[] {' '});
var maxPayRate = splitPayRate.Select(x => Convert.ToDecimal(x.Replace("%",""))).ToList().OrderByDescending(x=>x).Take(1).FirstOrDefault();发布于 2021-06-26 06:43:39
您可以为此使用重复捕获组,解析在每个组捕获中找到的数字,然后获得最大捕获率。因为我们将使用一个捕获组,我会放弃查找。像这样的事情应该有效:
string input = "Pay Rate: 12.12% 13.13% 14.14% 15.15%";
var match = Regex.Match(input, @"\bPay Rate:(?:\s*(\d+(?:\.\d+)?)%)+");
if (match.Success)
{
var rate = match.Groups[1]
.Captures.OfType<Capture>()
.Select(c => decimal.Parse(c.Value))
.Max();
Console.WriteLine(rate); // 15.15
}如果您确定最大值始终是最后一个,您可以简单地使用:
Regex.Match(input, @"\bPay Rate:(?:\s*(\d+(?:\.\d+)?)%)+").Groups[1].Value发布于 2021-06-26 06:52:35
您可以使用Linq的Max(),
var input = "12.12% 13.13% 14.14% 15.15% 10.10%";
var result = input.Replace("%","") //Remove all % from input string in one go
.Split(" ") //Split by space
.Select(decimal.Parse) //Convert IEnumerable of string to IEnumerable of float
.Max(); //Get Max element from given listhttps://stackoverflow.com/questions/68139831
复制相似问题