我遇到了从控制台获取三个参数的问题。 例如,用户进入控制台所以行:'/ s:http://asdasd.asd / e:device / f:create'
string params = Console.ReadLine(); // /s:http://asdasd.asd /e:device /f:create'
我需要得到那些参数
string server = ""; //should be "http://asdasd.asd"
string entity = ""; //should be "device"
string function = "" //should be "create"
我无法理解如何做到这一点。请帮帮我)
示例控制台 http://d.pr/i/kTpX
答案 0 :(得分:1)
使用它:
`(?<=/s:)[^ ]+`
`(?<=/e:)[^ ]+`
`(?<=/f:)[^ ]+`
答案 1 :(得分:1)
有很好的外部工具来解析输入参数。在编写自己的代码时,可以使用它们。我知道以下事项:
对你来说会容易得多。
答案 2 :(得分:1)
按空格字符拆分,然后在第一个':'处拆分。类似的东西:
string input = "/s:http://asdasd.asd /e:device /f:create";
string[] parameters = input.Split(' ');
foreach (string param in parameters)
{
string command = "";
string value = "";
command = param.Substring(0, param.IndexOf(':'));
value = param.Substring(param.IndexOf(':') + 1);
}
// Results:
// command: /s value: http://asdasd.asd
// command: /e value: device
// command: /f value: create
可能有可以帮助您的图书馆,或者您可以选择正则表达式。但在这种情况下并不是强制性的。显然,如果输入错误,应该有一些错误处理代码,但我认为你可以自己管理。
答案 3 :(得分:0)
这是一个正则表达式示例,可以根据您的需要进行分组和分组:
/s:([^ ]{1,100}) /e:([^ ]{1,100}) /f:([^ ]{1,100})
另外,我建议使用http://regexpal.com/来学习如何创建它们。
编辑:这是一个非常具体的例子,并未涵盖所有可能的情况。在上面的网站上测试它以获得不同的输入以进行必要的更改。
答案 4 :(得分:0)
此过程需要3个不同的正则表达式(至少我找不到常用的)。因为http://
会破坏此案例:)
string s = @"/s:http://asdasd.asd /e:device /f:create";
string reg1 = @"(?=/s:)[^ ]+";
string reg2 = "(?=/e:)[^ ]+";
string reg3 = "(?=/f:)[^ ]+";
Match match1 = Regex.Match(s, reg1, RegexOptions.IgnoreCase);
if (match1.Success)
{
string key1 = match1.Groups[0].Value.Substring(3);
Console.WriteLine(key1);
}
Match match2 = Regex.Match(s, reg2, RegexOptions.IgnoreCase);
if (match2.Success)
{
string key2 = match2.Groups[0].Value.Substring(3);
Console.WriteLine(key2);
}
Match match3 = Regex.Match(s, reg3, RegexOptions.IgnoreCase);
if (match3.Success)
{
string key3 = match3.Groups[0].Value.Substring(3);
Console.WriteLine(key3);
}
输出将是;
http://asdasd.asd
device
create
这是DEMO
。
答案 5 :(得分:0)
更简单的解决方案是:
(?<=\:)[^ ]+
这个正则表达式将返回三组。