由正常空间分隔的正整数的正则表达式

时间:2016-08-17 15:11:46

标签: c# regex

示例输入: " 1 4 2 5 9 "

通缉: "1""4""2""5""9"

使用

var rgx = new Regex("???"); 
var matches = rgx.Matches("  1  4 2 5 9 ");
var nums = new List<int>();
foreach(var match in matches)
    nums.Add(match.Caputre.Value);

2 个答案:

答案 0 :(得分:2)

如果您确定只有空格和数字块,则可以使用LINQ并使用int.Parse解析整数:

var str = "  1  4 2 5 9 ";
var res = str.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)
     .Select(r => int.Parse(r))
     .ToList();

如果您还需要一种预验证(为了确保您的字符串只包含任何空格和数字块,您可以使用更安全的基于正则表达式的解决方案:

var res2 = Regex.Matches(str, @"^(?:\s*([0-9]+))+\s*$")
    .Cast<Match>()
    .SelectMany(p => p.Groups[1].Captures.Cast<Capture>().Select(m => int.Parse(m.Value)))
    .ToList(); 

两者都导致:

enter image description here

答案 1 :(得分:0)

拆分将是一种较慢的方式。

尝试使用匹配(),例如:

var nums = new List<int>();
foreach (Match match in Regex.Matches("  1  4 2 5 9 ", @"\d+"))
{
    nums.Add(Int32.Parse(match.Value));
}

///////////////
StringBuilder builder = new StringBuilder();
foreach (int nN in nums)
{
    builder.Append(nN).Append(",");
}
string result = builder.ToString();
Console.WriteLine("{0}", result);