How can I split a string using regex to return a list of values?

前端 未结 8 1346
感动是毒
感动是毒 2021-01-25 11:42

How can I take the string foo[]=1&foo[]=5&foo[]=2 and return a collection with the values 1,5,2 in that order. I am looking for an answer using

相关标签:
8条回答
  • 2021-01-25 11:49

    Here's an alternative solution using the built-in string.Split function:

    string x = "foo[]=1&foo[]=5&foo[]=2";
    string[] separator = new string[2] { "foo[]=", "&" };
    string[] vals = x.Split(separator, StringSplitOptions.RemoveEmptyEntries);
    
    0 讨论(0)
  • 2021-01-25 11:51

    Assuming you're dealing with numbers this pattern should match:

    /=(\d+)&?/
    
    0 讨论(0)
  • 2021-01-25 11:53

    In C# you can use capturing groups

        private void RegexTest()
        {
            String input = "foo[]=1&foo[]=5&foo[]=2";
            String pattern = @"foo\[\]=(\d+)";
    
            Regex regex = new Regex(pattern);
    
            foreach (Match match in regex.Matches(input))
            {
                Console.Out.WriteLine(match.Groups[1]);
            }
        }
    
    0 讨论(0)
  • 2021-01-25 11:55

    Use the Regex.Split() method with an appropriate regex. This will split on parts of the string that match the regular expression and return the results as a string[].

    Assuming you want all the values in your querystring without checking if they're numeric, (and without just matching on names like foo[]) you could use this: "&?[^&=]+="

    string[] values = Regex.Split(“foo[]=1&foo[]=5&foo[]=2”, "&?[^&=]+=");
    

    Incidentally, if you're playing with regular expressions the site http://gskinner.com/RegExr/ is fantastic (I'm just a fan).

    0 讨论(0)
  • 2021-01-25 11:58

    Just make sure to escape the ampersand like so:

    /=(\d+)\&/
    
    0 讨论(0)
  • 2021-01-25 12:02

    I'd use this particular pattern:

    string re = @"foo\[\]=(?<value>\d+)";
    

    So something like (not tested):

    Regex reValues = new Regex(re,RegexOptions.Compiled);
    List<integer> values = new List<integer>();
    
    foreach (Match m in reValues.Matches(...putInputStringHere...)
    {
       values.Add((int) m.Groups("value").Value);
    }
    
    0 讨论(0)
提交回复
热议问题