我目前正在研究远程控制软件。该单元提供以下字符串(没有任何换行符或其他内容):
...some_general_infomations,param1=value1,param2=value2,param3=value3,paramN=valueN,...
我需要以某种方式将这些值分配给某些变量。由于这个字符串的长度是变化的,我不能使用子串(如果我错了,请纠正我)。
最有效(也是最快)的方式是什么?
编辑: @ Darin的解决方案适用于大多数消息,但这里的这个非常棘手:
CFG=0<\r><\n>BOU=0<\r><\n>ALA:D1=132,D2=0,D3=0<\r><\n>COD1:S=13<\r><\n>-C1=5,N1=12345678,CLS=0,VAL=0<\r><\n>-C2=5,N2=,CLS=0,VAL=0<\r><\n>COD2:S=0<\r><\n>-C1=0,N1=,CLS=0,VAL=0<\r><\n>ENT:APPEL1=0,APPEL2=0<\r><\n>USI:DEP=0,AES=1,V8K=1,FIL=1,DSP=0,RSC=1,AL3=0,TDA=1,A64=0,CCS=0,RES=0,xxx=0,xxx=0,5AS=1<\r><\n>PERF:<\r><\n>-DMIN=0,0,<\r><\n>OK<\r><\n>
我至少需要获得S,C1,N1的值。即使我删除换行符,这些参数也可以用逗号或冒号分隔。 我怎么能处理这个字符串?
答案 0 :(得分:4)
良好的分裂应该有效:
var input = "...some_general_infomations,param1=value1,param2=value2,paramN=valueN";
var tokens = input.Split(',');
if (tokens.Length > 0)
{
foreach (var token in tokens)
{
var parts = token.Split('=');
if (parts.Length > 1)
{
string paramName = parts[0];
string paramValue = parts[1];
}
}
}
答案 1 :(得分:2)
使用字符串类的Split
方法。
string[] pairs = words.Split(new Char [] {','});
foreach(string pair in pairs)
{
string[] kv = pair.Split(new Char [] {'='});
// kv[0] will hold the pair param name
// kv[1] will hold the pair param value
}
代码中有几个假设 - 您只有,
分隔的名称/值对,并且每对在名称和值之间都有=
。
答案 2 :(得分:1)
正则表达式是执行此操作的标准方法;像这样:
/,([^=]+)=([^,$]+)/