C# 入門 & 実践 / C sharp

4-21. 正規表現 / RegularExpressions - 3 - Captures


検索グループのキーが重なった場合の値取得方法です。

        static void Main()
        {
            int i ;
            int cnt ;

            string str = @"Microsoft .Net Frameword 2.0 
Microsoft .Net Frameword 2.0 日本語 Language Pack 
Visual C# 2005 Express Edition 
Microsoft SQL Server 2005 Express Edition x86";

            // Regex : 正規表現
            // 単語 + スペースが2個連続で続く場合を調べる
            Regex myRegex = new Regex(@"((?<tango>[A-Z][a-z]+)\s){2}");

            Console.WriteLine("// MatchCollection で全対象を検索");
            // MatchCollection で全対象を検索
            MatchCollection mc = myRegex.Matches(str);
            cnt = mc.Count;
            Console.WriteLine("■□■ 2 重単語 ■□■\n対象が {0} 個見つかりました。", cnt);
            if (cnt > 0)
            {
                StringBuilder sb = new StringBuilder();
                for ( i = 0; i < cnt; i++)
                {
                    Match m = mc[i];
                    // この場合はどちらかしかない。
                    if (m.Groups["tango"].Success)
                    {
                        // 単純に表示
                        Console.WriteLine("{0} Tango : {1}", i, m.Groups["tango"].Value);

                        // Captures を利用すると取り出せます!
                        // tango は2個有るはずです。
                        int c_cnt = m.Groups["tango"].Captures.Count;
                        Console.WriteLine("\t captuers.count : {0}", c_cnt);
                        foreach (Capture cap in m.Groups["tango"].Captures)
                        {
                            Console.WriteLine("\t : {0}", cap.Value);
                        }
                    }
                }
            }

        }

// MatchCollection で全対象を検索
■□■ 2 重単語 ■□■
対象が 5 個見つかりました。
0 Tango : Frameword
         captuers.count : 2
         : Net
         : Frameword
1 Tango : Frameword
         captuers.count : 2
         : Net
         : Frameword
2 Tango : Pack
         captuers.count : 2
         : Language
         : Pack
3 Tango : Edition
         captuers.count : 2
         : Express
         : Edition
4 Tango : Edition
         captuers.count : 2
         : Express
         : Edition
とこのように、2重に検索した場合、Captures に対象が入っています^^。
一つ目は "Net Frameword " という連続文字列から Net と Frameword という tango を取得しています!




4-20. 正規表現 / RegularExpressions - 2 - グループ « 4. C# 入門 Level 2 » 4-22. 正規表現 / RegularExpressions - 4 - 置換 Replace / MatchEvaluator


C# 入門 & 実践 / C sharp