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 (10 進数の後に 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 に答える