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

Posted

技术标签:

【中文标题】如何使用正则表达式拆分字符串以返回值列表?【英文标题】:How can I split a string using regex to return a list of values? 【发布时间】:2010-09-10 18:35:21 【问题描述】:

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

【问题讨论】:

【参考方案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]);
        
    

【讨论】:

感谢您的回答 :-) 我使用正则表达式“\[\]=(\w+)”对您的代码进行了一些修改【参考方案2】:

我不懂 C#,但是...

在java中:

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

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

【讨论】:

这在 NET 中不起作用,因为 split 需要一个文字字符串,而不是一个正则表达式【参考方案3】:

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

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);

【讨论】:

【参考方案4】:

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

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

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

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

【讨论】:

【参考方案5】:

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

/=(\d+)&?/

【讨论】:

【参考方案6】:

应该这样做:

using System.Text.RegularExpressions;

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

其中 s 是您想要提取数字的字符串。

【讨论】:

【参考方案7】:

只要确保像这样转义 & 符号:

/=(\d+)\&/

【讨论】:

【参考方案8】:

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

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

【讨论】:

以上是关于如何使用正则表达式拆分字符串以返回值列表?的主要内容,如果未能解决你的问题,请参考以下文章

Python正则表达式拆分但保留某些字符以进行拆分

使用正则表达式检测词组搭配

使用正则表达式拆分以特定字符开头和结尾的组[重复]

拆分正则表达式以提取连续字符的字符串

如何使用正则表达式拆分字符串而不消耗拆分器部分?

Java如何拆分正则表达式和字符串?