-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

の主なルールは、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);
}
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*$
  • ^行頭にマッチします。
  • .*任意の文字に 0 回以上一致します。
  • :リテラル文字 ' :' と一致します。
  • (?<digit> )一致した内容をdigitグループに入れます。
  • \d1 桁に一致します。(\d+は 1 つ以上の数字に一致します。)
  • \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 に答える