Как я могу разделить строку с помощью регулярных выражений, чтобы вернуть список значений? - PullRequest
1 голос
/ 18 сентября 2008

Как взять строку foo[]=1&foo[]=5&foo[]=2 и вернуть коллекцию со значениями 1,5,2 в указанном порядке. Я ищу ответ с помощью регулярных выражений в C #. Спасибо

Ответы [ 8 ]

4 голосов
/ 18 сентября 2008

В C # вы можете использовать группы захвата

    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]);
        }
    }
1 голос
/ 18 сентября 2008

Я бы использовал этот конкретный шаблон:

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

Так что-то вроде (не проверено):

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);
}
1 голос
/ 18 сентября 2008

Используйте метод Regex.Split () с соответствующим регулярным выражением. Это разделит на части строки, которые соответствуют регулярному выражению и вернет результаты в виде строки [].

Предполагая, что вы хотите получить все значения в строке запроса, не проверяя, являются ли они числовыми (и не просто сопоставляя их с именами, такими как foo []), вы можете использовать это: "&? [^ & =] + ="

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

Кстати, если вы играете с регулярными выражениями, сайт http://gskinner.com/RegExr/ фантастический (я просто фанат).

1 голос
/ 18 сентября 2008

Я не знаю C #, но ...

В Java:

String[] nums = String.split(yourString, "&?foo[]");

Второй аргумент в методе String.split() - это регулярное выражение, указывающее методу, где разбивать строку.

0 голосов
/ 18 сентября 2008

Вот альтернативное решение с использованием встроенной функции string.Split:

string x = "foo[]=1&foo[]=5&foo[]=2";
string[] separator = new string[2] { "foo[]=", "&" };
string[] vals = x.Split(separator, StringSplitOptions.RemoveEmptyEntries);
0 голосов
/ 18 сентября 2008

Просто убедитесь, что вы закрыли амперсанд, вот так:

/=(\d+)\&/
0 голосов
/ 18 сентября 2008

Это должно сделать:

using System.Text.RegularExpressions;

Regex.Replace(s, !@"^[0-9]*$”, "");

Где s - ваша строка, в которую вы хотите извлечь числа.

0 голосов
/ 18 сентября 2008

Предполагается, что вы имеете дело с числами, которым должен соответствовать этот шаблон:

/=(\d+)&?/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...