提取部分字符串

时间:2014-04-10 09:17:25

标签: c# c#-4.0

我的字符串就像

  

COMMAND =“HELP ME”TIMEOUT_SECONDS =“30”APP_ID =“SOMETHING RANDOM”COUNT =“100”RETVAL =“0”STDOUT =“DATA I NEED”STDERR =“NO ERROR”STATUS =“SUCCESS”

我希望能够提取STDOUTSTDERRSTATUS。我该怎么办?

3 个答案:

答案 0 :(得分:1)

你可以试试这个正则表达式:

(?<=(?:STDOUT|STDERR|STATUS)\=")([^"]+)

因此,您将获得3个结果。

MatchCollection mcol = Regex.Matches(strInput, @“(?<=(?:STDOUT|STDERR|STATUS)\=")([^"]+)”);

foreach(Match m in mcol)
{
   System.Diagnostic.Debug.Print(m.ToString());
}

此外:

using System.Text.RegularExpressions;

Live Demo

在这里,正则表达式的这一部分:

(?:STDOUT|STDERR|STATUS)

您还可以指定需要其值的密钥(除了提到的3之外)。

答案 1 :(得分:0)

string input2 = @"COMMAND=""HELP ME"" TIMEOUT_SECONDS=""30"" APP_ID=""SOMETHING RANDOM"" COUNT=""100"" RETVAL=""0"" STDOUT=""DATA I NEED"" STDERR=""NO ERROR"" STATUS=""SUCCESS""";

var dict = Regex.Matches(input2, @"(.+?)=""(.+?)""").Cast<Match>()
          .ToDictionary(m => m.Groups[1].Value.Trim(), 
                        m => m.Groups[2].Value.Trim());

Console.WriteLine(dict["STDOUT"]);
Console.WriteLine(dict["STATUS"]);

答案 2 :(得分:0)

使用以下功能:

public static Dictionary<string,string> GetValues(string command)
{
   Dictionary<string,string> output = new    Dictionary<string,string>();
   string[] splitCommand =  command.Split(" ");

   foreach(var item in splitCommand)
   {
      output.Add(item.Split("=")[0] , item.Split("=")[1]);
   }

  return output;
}

如果要获取值,请使用

之类的函数
Dictionary<string,string> output = YourClass.GetValue(command);
string stdout = output["STDOUT"];
string etderr= output["ETDERR"];
string status = output["STATUS"];

我无法访问编译器。所以,可能会有错误。但整体功能看起来像这样。