C# 如何使用正则表达式拆分字符串以返回值列表?

C# 如何使用正则表达式拆分字符串以返回值列表?,c#,regex,C#,Regex,如何获取字符串foo[]=1&foo[]=5&foo[]=2,并按该顺序返回值为1,5,2的集合。我正在用C#中的正则表达式寻找答案。谢谢,我不知道C,但是 在java中: String[] nums = String.split(yourString, "&?foo[]"); String.split()方法中的第二个参数是一个正则表达式,告诉方法在哪里拆分字符串。我不知道C#,但是 在java中: String[] nums = String.split(yourString, "

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

在java中:

String[] nums = String.split(yourString, "&?foo[]");
String.split()
方法中的第二个参数是一个正则表达式,告诉方法在哪里拆分字符串。

我不知道C#,但是

在java中:

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

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

假设您处理的是数字,此模式应匹配:

/=(\d+)&?/

假设您处理的是数字,此模式应匹配:

/=(\d+)&?/
这应该做到:

using System.Text.RegularExpressions;

Regex.Replace(s, !@"^[0-9]*$”, "");
其中s是要提取数字的字符串。

这应该可以:

using System.Text.RegularExpressions;

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

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

只需确保转义符号,如下所示:

/=(\d+)\&/

只需确保避开符号,如下所示:

/=(\d+)\&/
在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]);
        }
    }
在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]);
        }
    }
将Regex.Split()方法与适当的Regex一起使用。这将拆分字符串中与正则表达式匹配的部分,并将结果作为字符串[]返回

假设您希望查询字符串中的所有值都不检查它们是否为数字(并且不只是匹配foo[]等名称),您可以使用以下命令:&?[^&=]+=”

顺便说一句,如果你正在玩正则表达式,那么这个网站就棒极了(我只是一个粉丝)。

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

假设您希望查询字符串中的所有值都不检查它们是否为数字(并且不只是匹配foo[]等名称),您可以使用以下命令:&?[^&=]+=”


顺便说一句,如果你在玩正则表达式,这个网站非常棒(我只是一个粉丝)。

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

string re = @"foo\[\]=(?<value>\d+)";
string re=@“foo\[\]=(?\d+);
比如(未经测试):

Regex重新估价=新的Regex(re,RegexOptions.Compiled);
列表值=新列表();
foreach(在重估中匹配m。匹配(…putInputStringHere…)
{
添加((int)m.Groups(“value”).value);
}

我会使用这种特殊模式:

string re = @"foo\[\]=(?<value>\d+)";
string re=@“foo\[\]=(?\d+);
比如(未经测试):

Regex重新估价=新的Regex(re,RegexOptions.Compiled);
列表值=新列表();
foreach(在重估中匹配m。匹配(…putInputStringHere…)
{
添加((int)m.Groups(“value”).value);
}

这里有一个使用内置string.Split函数的替代解决方案:

string x = "foo[]=1&foo[]=5&foo[]=2";
string[] separator = new string[2] { "foo[]=", "&" };
string[] vals = x.Split(separator, StringSplitOptions.RemoveEmptyEntries);

下面是一个使用内置string.Split函数的替代解决方案:

string x = "foo[]=1&foo[]=5&foo[]=2";
string[] separator = new string[2] { "foo[]=", "&" };
string[] vals = x.Split(separator, StringSplitOptions.RemoveEmptyEntries);

这在网络中不起作用,因为split需要一个文本字符串,而不是regext。这在网络中不起作用,因为split需要一个文本字符串,而不是regext。谢谢你的回答。我用这个正则表达式修改了你的代码