-1

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

bl1a:bl3a: blaspecial:1\r\nblab7la\r\n\r\nbla:bla: blaspecial:4\r\nbl9abla\r\n\r\nb4la:bla: blaspecial:2\r\nblabla\r\ n\r\n

intin the的主要规则string是它以 开头":",以 结尾"\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);
}
4

2 回答 2

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.

于 2013-04-23T19:12:46.037 回答
1

听起来像是正则表达式的好处。

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

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

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

这只会得到那些直接在:空格和行分隔符之前和之后的整数。

于 2013-04-23T19:15:29.213 回答