1

我从控制台获取三个参数时遇到问题。例如,用户在控制台输入这样一行:'/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

4

6 回答 6

1

用这个:

`(?<=/s:)[^ ]+`
`(?<=/e:)[^ ]+`
`(?<=/f:)[^ ]+`
于 2013-05-14T08:23:36.857 回答
1

有很好的外部工具来解析输入参数。除了编写自己的代码之外,您还可以使用它们。我知道以下内容:

这对你来说会容易得多。

于 2013-05-14T08:25:05.583 回答
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

可能有可以帮助您的库,或者您可以选择正则表达式。但在这种情况下它不是强制性的。显然,在输入错误的情况下应该有一些错误处理代码,但我认为你可以自己管理。

于 2013-05-14T08:30:37.843 回答
0

这是一个正则表达式示例,它可以按照您的需要进行分组:

/s:([^ ]{1,100}) /e:([^ ]{1,100}) /f:([^ ]{1,100})

另外,我建议使用http://regexpal.com/来学习如何创建它们。

编辑:这是一个非常具体的例子,没有涵盖所有可能的情况。在上面的网站中对其进行测试以获取不同的输入以进行所需的更改。

于 2013-05-14T08:31:11.703 回答
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.

于 2013-05-14T08:33:27.383 回答
0

一个更简单的解决方案是:

(?<=\:)[^ ]+

这个单一的正则表达式将返回三个组。

于 2013-05-14T10:12:03.713 回答