我需要找到字符串中所有整数的总和:
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
int
中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);
}
答案 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);
这只会得到那些直接前面有:
并且用空格和行分隔符成功的整数。