开发者

Extracting variable number of token pairs from a string to a pair of arrays

开发者 https://www.devze.com 2023-03-21 23:05 出处:网络
Here is the requirement. I have a string with multiple entries of a particular format. Example below string SourceString = \"<parameter1(value1)><parameter2(value2)><parameter3(value3

Here is the requirement.

I have a string with multiple entries of a particular format. Example below

string SourceString = "<parameter1(value1)><parameter2(value2)><parameter3(value3)>";

I want to get the o开发者_StackOverflow社区uput as below

string[] parameters = {"parameter1","parameter2","parameter3"};   
string[] values = {"value1","value2","value3"};

The above string is just an example with 3 pairs of parameter values. The string may have 40, 52, 75 - any number of entries (less than 100 in one string). Like this I have multiple strings in an array. I want to do this operation for all the strings in the array.

Could any one please advice how to achieve this? I'm a novice in c#. Is using regex a better solution or is there any other method? Any help is much appreciated.


If you didn't like RegEx's you could do something like this:

  class Program
  {

    static void Main()
    {

        string input = "<parameter1(value1)>< parameter2(value2)>";
        string[] Items = input.Replace("<", "").Split('>');

        List<string> parameters = new List<string>();
        List<string> values = new List<string>();

        foreach (var item in Items)
        {
            if (item != "")
            {
                KeyValuePair<string, string> kvp = GetInnerItem(item);
                parameters.Add(kvp.Key);
                values.Add(kvp.Value);
            }
        }

        // if you really wanted your results in arrays
        //
        string[] parametersArray = parameters.ToArray();
        string[] valuesArray = values.ToArray();

    }


    public static KeyValuePair<string, string> GetInnerItem(string item)
    {
        //expects parameter1(value1)
        string[] s = item.Replace(")", "").Split('(');
        return new KeyValuePair<string, string>(s[0].Trim(), s[1].Trim());
    }
}

It might be a wee bit quicker than the RegEx method but certainly not as flexible.


You could use RegEx class in combination with an expression to parse the string and generate these arrays by looping through MatchCollections.

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx

This does it:

string[] parameters = null;
string[] values = null;
// string SourceString = "<parameter1(value1)><parameter2(value2)><parameter3(value3)>";
string SourceString = @"<QUEUE(C2.BRH.ARB_INVPUSH01)><CHANNEL(C2.MONITORING_CHANNEL)><QMGR(C2.MASTER_NA‌​ME.TRACKER)>";
// string regExpression = @"<([^\(]+)[\(]([\w]+)";
string regExpression = @"<([^\(]+)[\(]([^\)]+)";
Regex r = new Regex(regExpression);

MatchCollection collection = r.Matches(SourceString);
parameters = new string[collection.Count];
values = new string[collection.Count];

for (int i = 0; i < collection.Count; i++)
{
    Match m = collection[i];
    parameters[i] = m.Groups[1].Value;
    values[i] = m.Groups[2].Value;
} 
0

精彩评论

暂无评论...
验证码 换一张
取 消