我正在寻找一种算法/库来解析这个命令行:命令行(CSC样编译)解析
var cmd = "foo /option:value /option2:valueof /etc:.. baa /t:4 etc xd";
到:
foo => { "option", "value" },
{ "option2", "valueof" },
{"etc", ".."},
baa => {"t", "4"},
etc => {"xd", ""},
我在“纯模式”尝试(类C)只是使用if和for。但是正则表达式或linq的解决方案非常值得赞赏。
我的代码(不工作):
var cmd = "foo /option:value /option2:valueof /etc:.. baa /t:4 etc xd";
var keys = new Dictionary<string, Dictionary<string,string>>();
for (int pos = 0, len = cmd.Length; pos < len; pos++)
{
StringBuilder buffer = new StringBuilder();
char c = cmd[pos];
if (c == '/')
{
StringBuilder optionName = new StringBuilder();
StringBuilder optionValue = new StringBuilder();
do
{
c = cmd[pos++];
if (c == ':')
{
do
{
c = cmd[pos++];
optionValue.Append(c);
} while (c != '/' || c != ' ');
}
else
{
optionName.Append(c);
}
} while (c != ' ');
keys.Add(buffer.ToString(),
new Dictionary<string, string>
{
{optionName.ToString(), optionValue.ToString()}
});
}
}
它提前给予Index was outside the bounds of the array.
感谢。
选项值中是否可以有空格?如果是这样,你可以通过将它们用引号括起来来逃避它们吗?参数可以没有选择地发生吗?一个选项可以没有价值吗?是否有一个原因,你需要尝试解析一条线上的三个命令?回答这些问题将帮助我们回答您的问题。 – 2012-02-10 18:37:49