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 回答