0

以下のような文字列から値を抽出し、それらを特定の変数に割り当てることができる必要があります。

[1;1HSVC_LVL={89} CALLS_OFF={966} CALLS_Q={2} CURR_DEL={67}[K[2;1HACD_HOLD={4} AN_WAIT={3} NRDY_WRAP={9} WALK_AWAY={14} FRCD_OFF={12}[K[4;1H{EOM}[K

実際の文字列はやや長く、約16のキーと値のペアが含まれています。上記のように、無関係な文字を含めることもできます。この文字列は数秒ごとに到着するので、毎回かなり速く変数の値を解析する必要があります。キーと値のペアごとに個別の変数を用意します。

文字列内で、キー名、つまり「SVC_LVL」を検索し、キー値(「{}」内に含まれる、つまりキー名「SVC_LVL」の場合は「89」)を変数に割り当てる必要があります。値は毎回同じ長さである必要はないため、文字列から特定の数の文字を単純に削除することはできません。値を「{}」内にプルする必要があります。

したがって、私が本当に探しているのは、特定のキー名(事前に知っている)をそれぞれ見つけて、その次の「{}」内から値を取得し、それを値に割り当てて、次の手順に進む方法です。次のもの。

正規表現がそれを行うための最良の方法であるかどうか、そしてそれぞれを別々に引き出すための例は何であるかはわかりません。それを16回行うのは賢明なことですか?または私は別の方法を見るべきですか?

助けてくれてありがとう

4

1 に答える 1

3

特定のキーを検索する場合は、これを使用します。

string key = "SVC_LVL";
string pattern = key + @"\=\{(?<value>[^\}]+)\}";
foreach (Match m in Regex.Matches(input, pattern))
{
    Console.WriteLine(m.Groups["value"].Value);
}

または、これを使用してすべてのキーと値のペアを一覧表示します。

string patAllKeyValues = @"(?<key>[\p{L}_]+)\=\{(?<value>[^\}]+)\}";
foreach (Match m in Regex.Matches(input, patAllKeyValues))
{
    Console.WriteLine("{0} -> {1}", 
                       m.Groups["key"].Value, 
                       m.Groups["value"].Value);
}
于 2012-11-13T13:34:04.973 に答える