【C#】文字列の中から正規表現パターンに一致する箇所をひとつだけ取り出す (Regex.Match)

文字列の中から、特定のパターン(注文番号、ID、金額など)に合致する部分を探し出し、最初に見つかった1つだけを取得するには Regex.Match メソッドを使用します。

また、正規表現の「グループ化 ()」という機能を使うと、「注文ID全体」ではなく「IDの中の数字部分だけ」をピンポイントで抜き出すことも可能です。

目次

実装サンプル:注文番号の抽出

以下のコードでは、メールの件名文字列から「注文番号(Order-XXXX)」を探し出し、その番号部分だけを取り出しています。

サンプルコード

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        // 解析対象の文字列(メールの件名など)
        string subject = "Re: [Order-7721] 配送状況の確認について";

        Console.WriteLine($"解析対象: {subject}\n");

        // ---------------------------------------------------------
        // パターン1: マッチした部分をそのまま取得する
        // ---------------------------------------------------------
        // @"Order-\d+" の意味:
        // Order- : "Order-" という文字そのもの
        // \d+    : 数字が1回以上続く
        Match m1 = Regex.Match(subject, @"Order-\d+");

        if (m1.Success)
        {
            // Value プロパティには、マッチした文字列全体が入ります
            Console.WriteLine($"パターン1検出: {m1.Value}");
        }

        Console.WriteLine("---");

        // ---------------------------------------------------------
        // パターン2: 丸括弧 () を使って、数字部分だけを抜き出す
        // ---------------------------------------------------------
        // @"Order-(\d+)" の意味:
        // Order- : "Order-" という文字
        // (\d+)  : 数字部分をグループ化してキャプチャする
        Match m2 = Regex.Match(subject, @"Order-(\d+)");

        if (m2.Success)
        {
            // Groups[0] はマッチした全体 ("Order-7721")
            Console.WriteLine($"全体マッチ   : {m2.Groups[0].Value}");

            // Groups[1] は1つ目の () の中身 ("7721")
            // これで「数字だけ」を取り出せます
            Console.WriteLine($"数字のみ抽出 : {m2.Groups[1].Value}");
        }
    }
}

実行結果

解析対象: Re: [Order-7721] 配送状況の確認について

パターン1検出: Order-7721
---
全体マッチ   : Order-7721
数字のみ抽出 : 7721

解説と技術的なポイント

1. Match オブジェクト

Regex.Match を実行すると、結果として Match クラスのデータが返ってきます。

  • Success: パターンが見つかったかどうか(true/false)。値を取り出す前に必ずチェックします。
  • Value: 正規表現に一致した文字列全体が入っています。

2. Groups プロパティ(部分抽出)

正規表現の中でカッコ ( ) を使うと、その部分だけを「グループ」として個別に保存できます。これが Groups 配列に格納されます。

  • Groups[0]: マッチした全体(Value と同じ内容)。
  • Groups[1]: 1つ目の ( ) にマッチした中身。
  • Groups[2]: 2つ目の ( ) があればその中身。

これを使うと、「Key=Value」のような形式から「Value」だけを取り出したり、今回の例のように「固定文字を除いたID番号」だけを取り出す処理が簡単に書けます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次