我正在尝试实现一个命令解析器来将命令参数解析为键值对列表。
例如,有一个输出图像的命令:[name]_w[width]_h[height]_t[transparency]
,比如“image01_w64_h128_t90”,程序将输出具有指定大小和透明度的图像“image01”,到目前为止我正在使用正则表达式来解决它。 / p>
代码:
private static readonly Regex CommandReg = new Regex(
@"^(?<name>[\d\w]+?)(_W(?<width>\d+))?(_H(?<height>\d+))?(_T(?<transparency>\d+))?$"
, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.ExplicitCapture);
public static NameValueCollection ParseCommand(string command)
{
var match = CommandReg.Match(command);
if (!match.Success) return null;
var groups = match.Groups;
var paramList = new NameValueCollection(4);
paramList["name"] = groups["name"].Value;
paramList["width"] = groups["width"].Value;
paramList["height"] = groups["height"].Value;
paramList["transparency"] = groups["transparency"].Value;
return paramList;
}
这种方式很有效,而且代码非常简单。但是,更高的要求是如果参数的顺序改变,比如“image01_h128_w64_t90”或“image01_t90_w64_h128”,程序也可以输出预期的结果。
感谢您提出建议,编辑和查看。
答案 0 :(得分:0)
只需执行string.split('_')
然后遍历数组即可找到所需的一切。
if(arr[i].startswith("w"))
{
paramList["width"] = arr[i].remove(0,1);
}
等等。