如何使用正则表达式拆分字符串以返回值列表?
时间:2020-03-06 14:22:09 来源:igfitidea点击:
如何获取字符串foo [] = 1&foo [] = 5&foo [] = 2
并按该顺序返回值1,5,2
的集合。我正在寻找在C#中使用正则表达式的答案。谢谢
解决方案
我不懂C#,但是...
在Java中:
String[] nums = String.split(yourString, "&?foo[]");
String.split()方法中的第二个参数是一个正则表达式,它告诉该方法在哪里拆分字符串。
假设我们正在处理数字,则此模式应匹配:
/=(\d+)&?/
应该这样做:
using System.Text.RegularExpressions; Regex.Replace(s, !@"^[0-9]*$”, "");
其中s是我们要提取数字的字符串。
只需确保像这样逃脱"&"号即可:
/=(\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]); } }
将Regex.Split()方法与适当的regex一起使用。这将拆分与正则表达式匹配的字符串部分,并以string []的形式返回结果。
假设我们想要查询字符串中的所有值而无需检查它们是否为数字,(并且不仅仅与foo []之类的名称匹配),可以使用以下代码:
string[] values = Regex.Split(“foo[]=1&foo[]=5&foo[]=2”, "&?[^&=]+=");
顺便说一句,如果我们正在使用正则表达式,则该网站http://gskinner.com/RegExr/非常棒(我只是一个粉丝)。
我将使用以下特定模式:
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); }
这是使用内置string.Split函数的替代解决方案:
string x = "foo[]=1&foo[]=5&foo[]=2"; string[] separator = new string[2] { "foo[]=", "&" }; string[] vals = x.Split(separator, StringSplitOptions.RemoveEmptyEntries);