3

我找到了这个 C# 代码,然后根据我的需要对其进行了改进,但现在我想让它适用于所有数字数据类型。

    public static int[] intRemover (string input)
    {
        string[] inputArray = Regex.Split (input, @"\D+");
        int n = 0;
        foreach (string inputN in inputArray) {
            if (!string.IsNullOrEmpty (inputN)) {
                n++;
            }
        }
        int[] intarray = new int[n];
        n = 0;
        foreach (string inputN in inputArray) {
            if (!string.IsNullOrEmpty (inputN)) {
                intarray [n] = int.Parse (inputN);
                n++;
            }
        }
        return intarray;
    }

这适用于尝试从字符串中提取整数整数,但我遇到的问题是我使用的正则表达式没有设置为解释负数或其中包含小数点的数字。就像我说的那样,我最终的目标是制作一种适用于所有数字数据类型的方法。谁能帮帮我?

4

2 回答 2

6

你可以match它而不是分裂它

public static decimal[] intRemover (string input)
{
    return Regex.Matches(input,@"[+-]?\d+(\.\d+)?")//this returns all the matches in input
                .Cast<Match>()//this casts from MatchCollection to IEnumerable<Match>
                .Select(x=>decimal.Parse(x.Value))//this parses each of the matched string to decimal
                .ToArray();//this converts IEnumerable<decimal> to an Array of decimal
}

[+-]?匹配+-0 或 1 次

\d+匹配 1 到多个数字

(\.\d+)?匹配 a(十进制后跟 1 到多个数字)0 到 1 次


上述代码的简化形式

    public static decimal[] intRemover (string input)
    {
        int n=0;
        MatchCollection matches=Regex.Matches(input,@"[+-]?\d+(\.\d+)?");
        decimal[] decimalarray = new decimal[matches.Count];

        foreach (Match m in matches) 
        {
                decimalarray[n] = decimal.Parse (m.Value);
                n++;
        }
        return decimalarray;
    }
于 2012-11-30T08:57:30.323 回答
1

尝试像这样修改你的正则表达式:

 @"[+-]?\d+(?:\.\d*)?"
于 2012-11-30T08:57:23.913 回答