C#正規表現を使ったマッチングを試す。

C# コンピュータ
C#

C#でも.NETのライブラリを使ったマッチングをすることが出来ます。
スクリプト系の言語と比べると書式が若干長めだったりもしますが、正規表現が使えることで文字処理が格段に楽になります。
正規表現を用いた機能の中からよく使いそうな機能のサンプルを試してみました。

// 
// 正規表現のサンプル
// 
using System;
using System.Text.RegularExpressions;

// コンパイル
// csc /t:exe Regex.cs

class RegexSample
{
    static void Main()
    {
        // 正規表現パターン
        string pattern = @"\d+\.(\w+)$";

        // \d  数値
        // \w  単語構成文字:[a-zA-Z_0-9]
        // \s  空白
        // \n  改行
        // .  任意の一文字
        // n+  nが1個以上とマッチ
        // n*  nが0個以上とマッチ
        // n?  nか0個または1個とマッチ
        // n+?  nが1個以上最短マッチ
        // {n}  直前の要素n回とマッチ
        // $  末尾とマッチ
        // ^  先頭とマッチ
        // [a-z]+  文字クラス,aからzの1個以上文字とマッチ
        // [zip|txt]  文字クラス,zip又はtxtとマッチ

        // 対象文字列
        string target = @".\test\1.TxT";

        // 大文字小文字区別しないマッチング
        bool result = Regex.IsMatch(
            target, pattern, RegexOptions.IgnoreCase);
        Console.WriteLine("IsMatch:{0}", result);
        // IsMatch:True

        // マッチした要素の取得
        var reg = new Regex(pattern, RegexOptions.IgnoreCase);
        var matches = reg.Matches(target);
        if (matches.Count > 0)
        {
            foreach(Match match in matches)
            {
                Console.WriteLine("Value:{0}", match.Value);
                Console.WriteLine("Groups[0]:{0}", match.Groups[0]);
                Console.WriteLine("Groups[1]:{0}", match.Groups[1]);
            }
        }
        // Value:1.TxT
        // Groups[0]:1.TxT
        // Groups[1]:TxT

        // 置換
        string replacement = @".csv";
        string s = Regex.Replace(
            target, @"\.\w+$", replacement, RegexOptions.IgnoreCase);
        Console.WriteLine("Replace:{0}", s);
        // Replace:.\test\1.csv

        // 分割
        var a = Regex.Split(target, @"\\", RegexOptions.IgnoreCase);
        foreach(var x in a)
        {
            Console.WriteLine("split:{0}", x);
        }
        // split:.
        // split:test
        // split:1.TxT
    }
}

コメント