使用正则表达式的多个小数的通用提取

本文关键字:提取 小数 正则表达式 | 更新日期: 2023-09-27 18:26:23

嗨,如何从字符串中提取具有不同小数位数的多个小数?我正在寻找一种从以下字符串中提取3个数字的通用方法。

例如

CC77X1722X12 => 77,1722,12
PC77.5X10102X12.5 => 77.5, 10102, 12.5
XP60.25X0.333X12 => 60.25, 0.333, 12

这三个数字总是用"X"分隔,字符串总是以2个字符开头

谢谢!

使用正则表达式的多个小数的通用提取

由于您有这样一个特定的模式,您甚至不需要使用正则表达式。因为前两个字符可以忽略,并且所有数字都用"X"字符分隔,所以这个C#代码应该可以完成任务(当然,添加了适当的错误处理)

public IEnumerable<decimal> ExtractNumbers(string s)
{                                                  // For s = "CC77X1722X12"
    string[] nums = s.Substring(2).Split('X');     // nums = ["77", "1722", "12"];
    return nums.Select(num => decimal.Parse(num)); // returns [77, 1722, 12]
}

不过,对于生产代码,我建议使用十进制。decimal.Parse上的TryParse。要使用这种方法,你可以写一些类似的东西

public IEnumerable<decimal> ExtractNumbers(string s)
{
    string[] nums = s.Substring(2).Split('X');
    return nums
        .Select(num => {
                decimal d;
                if (decimal.Parse(num, out d))
                    return new {Number = d, Succeeded = true};
                return new {Number = 0, Succeeded = false};
            })
        .Filter(result => result.Succeeded)
        .Select(result => result.Number);
}