Dotnet从字符串中提取值

时间:2012-11-13 13:08:03

标签: .net regex

我需要能够从下面的字符串中提取值,并将它们分配给特定的变量。

[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',并将密钥值(包含在'{}'中,即'89'中的密钥名称'SVC_LVL')分配给变量。这些值每次都不一定是相同的长度,所以我不能简单地从字符串中删除特定数量的字符,需要在“{}”中提取值

所以我真正想要的是找到每个特定键名的方法(我事先知道),然后从下一个'{}'中提取值,将其赋值给一个值,并继续下一个。

不确定正则表达式是否是最好的方法,以及将每个单独拉出来的例子。这样做16次是明智的吗?或者我应该以不同的方式看待它?

感谢您的帮助

1 个答案:

答案 0 :(得分: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);
}
相关问题