みんなのちからになりたい

コピペでブログラムつくっていきたい

LINQで正規表現使って値を取り出す

最近やっと職場の開発環境が.NET3.0になったっていう地獄のような場所なのだけど、やっとLINQ使えるようになってやったーって思って使ってて、正規表現で値取ってきたやつを集計できたら便利だなと思っていろいろ調べてたらできるようだったのでメモ。

例がよくないけど、とりあえず設定nの最大値+1の値を取得したいみたいなことする場合はこんな感じでできる。

using System;
using System.Linq;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        var items = new [] {
            new { Name = "設定1", Value = 100},
            new { Name = "設定2", Value = 200},
            new { Name = "設定3", Value = 300},
            new { Name = "設定4", Value = 400},
            new { Name = "設定5", Value = 500}
        };
        var regex = new Regex(@"設定(?<num>\d+)", RegexOptions.IgnoreCase | RegexOptions.Singleline);
        var idx = 1;
        var result = items
            .Select(item => new { m = regex.Match(item.Name), item.Name })
            .Where(x => x.m.Success == true)
            .OrderBy(x => int.Parse(x.m.Groups["num"].Value))
            .Select(x => int.Parse(x.m.Groups["num"].Value));
        if (result.ToArray().Count() > 0) idx = result.Max() + 1;
        Console.WriteLine(idx);
    }
}

このくらい単純なやつならNameのMax取ってきて数値抜き出せばいいのだけど、とりあえずの例としてはいいかなと。