字符串子字符串或正则表达式

时间:2013-05-14 08:20:06

标签: c# .net regex string

我遇到了从控制台获取三个参数的问题。 例如,用户进入控制台所以行:'/ 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

6 个答案:

答案 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)

更简单的解决方案是:

(?<=\:)[^ ]+

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