1

如何获取字符串foo[]=1&foo[]=5&foo[]=2并返回具有1,5,2该顺序值的集合。我正在寻找在 C# 中使用正则表达式的答案。谢谢

4

8 回答 8

4

在 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]);
        }
    }
于 2008-09-18T16:17:56.190 回答
1

我不懂C#,但是...

在java中:

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

方法中的第二个参数String.split()是一个正则表达式,告诉方法在哪里拆分字符串。

于 2008-09-18T16:11:02.027 回答
1

将 Regex.Split() 方法与适当的正则表达式一起使用。这将拆分与正则表达式匹配的部分字符串并将结果作为字符串 [] 返回。

假设您想要查询字符串中的所有值而不检查它们是否是数字,(并且不只是匹配 foo[] 之类的名称),您可以使用:"&?[^&=]+="

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

顺便说一句,如果您正在使用正则表达式,那么http://gskinner.com/RegExr/网站非常棒(我只是一个粉丝)。

于 2008-09-18T16:20:26.763 回答
1

我会使用这个特殊的模式:

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);
}
于 2008-09-18T16:22:03.857 回答
0

假设您正在处理数字,此模式应匹配:

/=(\d+)&?/
于 2008-09-18T16:13:51.490 回答
0

这应该这样做:

using System.Text.RegularExpressions;

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

其中 s 是您希望在其中提取数字的字符串。

于 2008-09-18T16:16:29.313 回答
0

只要确保像这样逃脱&符号:

/=(\d+)\&/
于 2008-09-18T16:16:30.813 回答
0

这是使用内置 string.Split 函数的替代解决方案:

string x = "foo[]=1&foo[]=5&foo[]=2";
string[] separator = new string[2] { "foo[]=", "&" };
string[] vals = x.Split(separator, StringSplitOptions.RemoveEmptyEntries);
于 2008-09-18T17:23:41.977 回答