3

コーディング中に、次のような文字列の解析に関連する問題に遭遇しました。

{15} 194個の赤い風船、{26} 23個のステッカー、{40} 12個のジャック、...。

私のコードでは、文と数字の両方を2つの別々の配列にプルしました。最初の部分を削除するためにを使用して文を独自の配列に解析することに関する問題を解決しました。その*.Remove(0, 5)部分の問題は、ファイルが常に標準に書き込まれていることを確認する必要があることでした。しかし、それは私が望むほどエレガントではなく、時にはその数が{3}になり、私はそれを{3}にすることを余儀なくされました。

文字列に他の数値が含まれている可能性もあったため、最初に整数を単純に解析することはできませんでした。

int?[] array = y.Split(',')
            .Select(z =>
            {
                int value;
                return int.TryParse(z, out value) ? value : (int?)null;
            })
            .ToArray();

とにかく、目前の問題に戻ると、「{##}」を解析して、それぞれが独自の要素を持つ配列にする必要があります。

4

1 に答える 1

2

正の先読み/後読みを使用してそれを行う1つの方法を次に示します。

string s = "{15} there are 194 red balloons, {26} there are 23 stickers, {40} there are 12 jacks";

// Match all digits preceded by "{" and followed by "}"
int[] matches = Regex.Matches(s, @"(?<={)\d+(?=})")
    .Cast<Match>()
    .Select(m => int.Parse(m.Value))
    .ToArray(); 

// Yields [15, 26, 40]
于 2013-01-12T02:58:12.923 に答える