查找字符串C#中的所有整数

时间:2013-04-23 19:10:21

标签: c# regex string

我需要找到字符串中所有整数的总和:

  

bl1a:bl3a:blaspecial:1 \ r \ n \ nblab7la \ r \ n \ r \ n \ nbla:bla:blaspecial:4 \ r \ n \ n \ n \ n \ n \ n \ n \ n \ r \ n \ n \ r \ n \ n \ r \ n \ n \ n \ n \ n \ r \ n \ n \ n \ n \ n \ n \ n \ rb \ bb:la:blaspecial:\ n \ r \ n \ n \ n \ n \ n \ n \ n \ n \ nblabla \ r \ n \ r \ n

intstring的主要规则是,它以":"开头,以"\r\n"结尾,可能是from 1 to 5

我尝试使用SubString,但没有结果:

var reg=new Regex("blaspecial", RegexOptions.IgnoreCase);
var mathes=reg.Matches(tempStr);
var l=mathes.Count;
var a=0;

for(var i=0; i<l; i++) 
{
    tempStr=tempStr.Substring(
        tempStr.IndexOf("blaspecial:", StringComparison.Ordinal)+11);

    var r=tempStr.Substring(0, 1);
    a=a+int.Parse(r);
}

2 个答案:

答案 0 :(得分:4)

您可以这样做,将字符串中的所有整数添加到一起:

var sum = Regex.Matches(input, @"\d+")
               .Cast<Match>()
               .Select(m => int.Parse(m.Value))
               .Sum();

或者这样可以将结果限制为模式:123\r\n

中的整数
var sum = Regex.Matches(input, @":(\d+)\r\n")
               .Cast<Match>()
               .Select(m => int.Parse(m.Groups[1].Value))
               .Sum();

使用输入字符串调用时,两者都将输出7

答案 1 :(得分:1)

听起来像正则表达式有用。

^.*:(?<digit>\d)\s*$
  • ^匹配一行的开头。
  • .*匹配任何字符,零次或多次。
  • :与文字字符“:”匹配。
  • (?<digit> )将匹配的内容放入digit组。
  • \d匹配一位数字。 (\d+会匹配一个或多个数字。)
  • \s*匹配某些空格(如果存在)。
  • $匹配该行的结尾。

然后使用带有RegexOptions.Multiline选项的Regex class 。例如:

string input = "bla:bla: blaspecial:1\r\n...";

int sum = 0;
var matches = Regex.Matches(input, @"^.*:(?<digit>\d)\s*$", RegexOptions.Multiline);
foreach (Match match in matches)
{
    var group = match.Groups["digit"];
    if (group.Success)
    {
        int value = Int32.Parse(group.Value);
        sum += value;
    }
}
Console.WriteLine(sum);

这只会得到那些直接前面有:并且用空格和行分隔符成功的整数。