【C#入門】正規表現の使い方総まとめ(Match/Matches/Replace)

こんにちは!エンジニアの中沢です。

C#には文字列のパターンを指定して検索するための「正規表現」が利用できます。正規表現でパターンを指定すれば任意の文字列を検索する、書き換えるなどができるので、上手く活用してください。

この記事では、

  • 正規表現とは
  • IsMatchメソッドでパターンに一致するか判定する方法
  • Matchメソッドで最初に一致した部分を抽出する方法
  • Matchesメソッドで一致したすべての部分を抽出する方法
  • という基本的な内容から、

  • Replaceメソッドで置換する方法
  • などの応用的な使い方に関しても解説していきます。

    目次

    正規表現とは

    正規表現とはいくつかの文字列のパターン一つの形式でまとめて表現するための表現方法のことです。

    主な正規表現については次の表のとおりになります。

    記号記号の説明例の説明
    .任意の1文字。改行文字は除く。.+任意の文字列
    *直前の1文字の0回以上の繰り返しと一致hoge*hogeもしくはhogee...と一致
    ^行の先頭^[0-9]行頭が数字
    $行の末尾^.{10}$10文字の行
    [ ]カッコ内の任意の1文字と一致。「-」で範囲指定可。[a-z]小文字のアルファベット1文字と一致
    [^ ]カッコ内の任意の1文字と不一致。「-」で範囲指定可。[^A-Z]大文字のアルファベット以外
    +直前の文字の1個以上の繰り返しと一致hoge+hogee...と一致
    ?直前の文字の0または1文字と一致hoge?eと一致
    { }カッコ内の数値の繰り返しと一致{n}直前の文字のn個の繰り返しと一致
    {,n}直前の文字のn個以下の繰り返しと一致
    {m,}直前の文字のm個以上の繰り返しと一致
    {m,n}直前の文字のm個以上、n個以下の繰り返しと一致
    |直前、直後どちらかのパターンに一致hoge|piyohogeまたはpiyo
    ( )カッコ内をグループ化。マッチした内容は参照可。

    IsMatchメソッドでパターンに一致するか判定する

    ここでは、IsMatchメソッドでパターンに一致するか判定する方法を解説します。

    IsMatchメソッドは第1引数に検索対象の文字列を指定し、第2引数に正規表現のパターンを指定します。次のプログラムで確認してみましょう。

    using System;
    using System.Text.RegularExpressions;
    
    namespace Sample
    {
        class Sample
        {
            static void Main()
            {
                string str = "SamuraiEngineer";
    
                bool result = Regex.IsMatch(str, "Samurai");
    
                Console.WriteLine(result);
    
                Console.ReadKey();
            }
        }
    }

    実行結果:

    True

    このようにして指定したパターンが含まれるかどうかを判定することができました。

    抽出する方法

    Matchメソッドで最初に一致した部分を抽出

    ここでは、Matchメソッドで最初に一致した部分を抽出する方法を解説します。Matchメソッドは第1引数に検索対象の文字列を指定し、第2引数に正規表現のパターンを指定します。

    Matchメソッドは検索対象の文字列の中に一致する部分に複数あった場合でも、最初に一致した文字列だけを返すので注意してください。

    次のプログラムで確認してみましょう。

    using System;
    using System.Text.RegularExpressions;
    
    namespace Sample
    {
        class Sample
        {
            static void Main()
            {
                string str = "Samurai, 123, Engineer";
                Match matche = Regex.Match(str, "[0-9]");
    
                Console.WriteLine(matche.Value);
    
                Console.ReadKey();
            }
        }
    }

    実行結果:

    1

    このプログラムでは、0~9のいずれかの数字に一致するパターンの「[0-9]」を指定しています。

    この実行結果のように、初めに現れる数値の「1」にマッチするため抽出することができます。

    Matchesメソッドで一致したすべての部分を抽出

    ここでは、Matchesメソッドで一致したすべての部分を抽出する方法を解説します。Matchesメソッドは指定したパターンに一致したすべての文字列を抽出するために使います。

    Matchesメソッドは第1引数に検索対象の文字列を指定し、第2引数に正規表現のパターンを指定します。

    次のプログラムで確認してみましょう。

    using System;
    using System.Text.RegularExpressions;
    
    namespace Sample
    {
        class Sample
        {
            static void Main()
            {
                string str = "Samurai, 123, Engineer";
                MatchCollection matche = Regex.Matches(str, "[0-9]");
    
                foreach (Match m in matche)
                {
                    Console.WriteLine(m.Value);
                }
    
                Console.ReadKey();
            }
        }
    }

    実行結果:

    1
    2
    3

    このプログラムでは、検索対象の文字列からすべての数値を抽出しています。

    抽出する方法についてはこちらの記事で詳しく解説しているので、ぜひ確認してください。

    Replaceメソッドで置換する方法

    ここでは、Replaceメソッドで置換する方法を解説します。

    Replaceメソッドは第1引数に検索対象の文字列を指定し、第2引数に置換後の文字列を指定します。次のプログラムで確認してみましょう。

    using System;
    using System.Text.RegularExpressions;
    
    namespace Sample
    {
        class Sample
        {
            static void Main()
            {
                string str = "SamuraiEngineer";
                Regex reg = new Regex("Samurai");
    
                string result = reg.Replace(str, "サムライ");
    
                Console.WriteLine(result);
    
                Console.ReadKey();
            }
        }
    }

    実行結果:

    サムライEngineer

    このようにして指定した文字列を置換することができました。

    Replaceメソッドの詳しい使い方はこちらの記事で解説しているので、ぜひ確認してください。

    まとめ

    いかがでしたか?

    今回は正規表現でパターンを指定して検索する方法を解説しました。

    正規表現を使って任意のパターンを抽出したり、置換することができるので、ぜひ活用してくださいね。もし、正規表現の使い方を忘れてしまったらこの記事を確認してください!

    この記事を書いた人

    フリーランスエンジニア。
    システム開発からコンテンツ作成まで幅広く対応します。

    連絡先はこちらです。
    ntakeshi@sejuku.net

    目次