C#の正規表現|エスケープ処理や抽出、数字、match、ismatchなど実務で使える正規表現一覧のカバー画像

C#の正規表現|エスケープ処理や抽出、数字、match、ismatchなど実務で使える正規表現一覧

公開日:2025/03/04最終更新日:2025/03/22

C#で開発をしていると、文字列処理が必要な場面が多くあります。その際に強力なツールとなるのが「正規表現」です。正規表現を使うことで、文字列の検索・抽出・置換・検証を効率的に行うことが可能になります。


本記事では、C#における正規表現の基本から応用まで、具体的なコード例を交えて解説します。

1.C#の正規表現の基本

C#での文字列処理において、特定のパターンを検索・抽出・置換するために強力なツールとなるのが正規表現(Regex)です。例えば、メールアドレスのバリデーションやログデータの解析、特定のキーワード抽出など多くの場面で活用されています。


しかし、正規表現は記法が独特で初心者には難しく感じることもあります。本章では、C#における正規表現の基本を理解し、スムーズに使いこなせるようになるために正規表現とは何か、どのように扱うのかを詳しく解説します。

正規表現とは?

正規表現とは、特定のパターンを持つ文字列を検索・操作するための記法です。

C#では、System.Text.RegularExpressions名前空間にあるRegexクラスを利用することで、正規表現を簡単に扱うことができます。


例えば、次のようなパターンがよく使われます。

用途

正規表現

メールアドレス

\w+@\w+\.\w+

URL

https?://\S+

電話番号

\d{2,4}-\d{2,4}-\d{4}

日付(YYYY-MM-DD)

\d{4}-\d{2}-\d{2}

数字のみ

^\d+$

C#で正規表現を扱う方法

C#では、主にRegexクラスを使用して正規表現を扱います。

例1:文字列からメールアドレスを抽出する

using System;

using System.Text.RegularExpressions;


class Program

{

    static void Main()

    {

        string text = "サンプルのメールアドレス: example@test.com";

        string pattern = @"\w+@\w+\.\w+";


        Match match = Regex.Match(text, pattern);

        if (match.Success)

        {

            Console.WriteLine("一致: " + match.Value);

        }

    }

}


// 出力

一致: example@test.com

例2:文字列が数値かどうかを判定する

bool isNumber = Regex.IsMatch("12345", @"^\d+$");

Console.WriteLine(isNumber);  // True

2.C#正規表現のエスケープ処理

C#の正規表現を使用する際、エスケープ処理が適切に行われていないために、思ったように動作しないという問題に直面することがあります。特に(.)や(\)などの特殊文字をそのまま検索しようとすると、意図しない結果になることがあるため、正しいエスケープの方法を理解しておくことが重要です。

エスケープが必要な特殊文字

正規表現には特別な意味を持つメタ文字があります。

メタ文字

説明

.

任意の1文字

*

直前の文字の0回以上の繰り返し

+

直前の文字の1回以上の繰り返し

?

直前の文字の0回または1回の出現

\d

数字([0-9]と同じ)

\w

英数字([a-zA-Z0-9_]と同じ)

\s

空白文字(スペース、タブなど)

エスケープ処理の実例

例えば、ドット(.)を含む文字列をそのまま検索する場合

string pattern = @"C\.#";  // 「C.#」を検索

また、C#の文字列リテラルでは(\)自体もエスケープが必要になるため、(@)を使うことが推奨されます。

string pattern = @"C\.";

3.C#正規表現チェッカーとデバッグ

C#で正規表現を扱う際、思ったようにマッチしない、予期しない結果になるといったトラブルに遭遇することがあります。特に、複雑な正規表現を使用する場合、適切なデバッグ方法を知っておくことが重要です。

正規表現のテストツール

正規表現のデバッグには、以下の方法が便利です。

  • オンラインツールの活用

    • Regex101(シンタックス解説付き)

    • RegExr(インタラクティブに試せる)

  • C#でのデバッグ

    • RegexOptionsを活用する(IgnoreCase, Multiline, Compiled など)

Regex regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);

また、Visual Studioの「インタラクティブウィンドウ」を使ってC#のコードを実行しながらデバッグすることも可能です。

RegexOptionsを使ったデバッグ

C#のRegexOptionsを利用すると、正規表現の動作を変更できます。

RegexOptions

説明

IgnoreCase

大文字・小文字を区別しない

Multiline

^と$を各行の先頭・末尾に適用

Singleline

.が改行を含めた任意の文字と一致

Compiled

正規表現を事前コンパイルし、実行速度を向上

ExplicitCapture

名前付きキャプチャグループのみを有効にする

IgnorePatternWhitespace

パターン内の空白を無視し、#でコメントを記述可能

RightToLeft

右から左へのマッチングを行う

ECMAScript

ECMAScript準拠の正規表現構文を使用する

例:大文字・小文字を無視するIgnoreCaseの使用

string text = "Hello World";

string pattern = "hello";

bool isMatch = Regex.IsMatch(text, pattern, RegexOptions.IgnoreCase);

Console.WriteLine(isMatch); // True

例:Compiledオプションを使用してパフォーマンスを向上

Regex regex = new Regex(@"\d+", RegexOptions.Compiled);

Match match = regex.Match("ID: 12345");

Console.WriteLine(match.Value); // 12345

4.C#で文字列から特定の情報を抽出する

C#の正規表現を活用すると、特定のパターンに一致するデータを効率的に抽出できます。例えば、以下のような用途があります。

  • ユーザー入力の検証

    メールアドレス・電話番号・郵便番号・クレジットカード番号のチェック

  • ログ解析

    システムログやエラーログから特定の情報を抽出

  • データの抽出

    HTML・JSON・CSV・XMLから特定の値を取得

  • 文章解析

    指定されたキーワードを含む文章の検索

  • テキスト処理

    任意のパターンに一致する部分を抽出して、新しいデータセットを作成

本章では、MatchやMatchesメソッドを使って、さまざまなケースでのデータ抽出方法を詳しく解説します。

Matchメソッドを使って特定のデータを取得

Regex.Match()を使用すると、文字列内で最初に一致するパターンを取得できます。

using System;

using System.Text.RegularExpressions;


class Program

{

    static void Main()

    {

        string text = "商品コード: ABC123, 価格: 299円";

        string pattern = @"[A-Z]{3}\d{3}"; // ABC + 数字3桁


        Match match = Regex.Match(text, pattern);

        if (match.Success)

        {

            Console.WriteLine("商品コード: " + match.Value);

        }

    }

}


// 出力

商品コード: ABC123

この例では、[A-Z]{3}\d{3}という正規表現を使って、3文字の英大文字+3桁の数字で構成された商品コードを抽出しています。

Matchesメソッドで複数の一致を取得

Regex.Matches()を使用すると、文字列内で複数の一致する部分をすべて取得できます。

string text = "価格リスト: 1500円, 3200円, 870円";

string pattern = @"\d+円"; // 「数字+円」のパターン


MatchCollection matches = Regex.Matches(text, pattern);

foreach (Match match in matches)

{

    Console.WriteLine("金額: " + match.Value);

}


// 出力

金額: 1500円

金額: 3200円

金額: 870円

このコードでは、\d+円という正規表現を使用し、金額の部分をすべて取得しています。

Match.Groupsを使った詳細なデータ抽出

正規表現のグループ機能を活用すると、複数のデータを一度に取得できます。

string text = "イベント開催日: 2025-03-15";

string pattern = @"(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})"; // 年・月・日をキャプチャ


Match match = Regex.Match(text, pattern);

if (match.Success)

{

    Console.WriteLine("年: " + match.Groups["year"].Value);

    Console.WriteLine("月: " + match.Groups["month"].Value);

    Console.WriteLine("日: " + match.Groups["day"].Value);

}


// 出力

年: 2025

月: 03

日: 15

(?<year>\d{4})のように(?<name>pattern)という形式でグループを作成すると、グループ名でデータを取得できます。

5.C#正規表現の書き方一覧

C#の正規表現を活用することで、さまざまな形式のデータを効率的に処理できます。ここでは、実際の開発でよく使われる正規表現のパターンを紹介し、それぞれの用途について詳しく解説します。

文字列の基本的なマッチングパターン

文字列の基本的なマッチングパターンを一覧でまとめました。

パターン

説明

.

任意の1文字

a.bはaxb, a9bにマッチ

\d

数字(0-9)

\d+は123, 42にマッチ

\w

英数字とアンダースコア(a-z,A-Z,0-9,_)

\w+はabc, A1B2, test_1にマッチ

\s

空白(スペース,タブ,改行)

\s+は" "や"\t", "\n"にマッチ

\W

英数字以外の1文字

\W+は!@#, 空白, 記号にマッチ

\D

数字以外の1文字

\D+はABC, xyzにマッチ

^

行の先頭

^Helloは"Hello world"にマッチ

$

行の末尾

world$は"Hello world"にマッチ

例えば、文字列内のすべての英単語を取得する例は下記の通りです。

string text = "Hello, this is a C# regex tutorial!";

string pattern = @"\w+";


MatchCollection matches = Regex.Matches(text, pattern);

foreach (Match match in matches)

{

    Console.WriteLine("単語: " + match.Value);

}


// 出力

単語: Hello

単語: this

単語: is

単語: a

単語: C

単語: regex

単語: tutorial

\w+を使用することで、英単語のみを抽出できます。

数値データの処理

数値を扱う場合、特定のフォーマットに一致するかどうかを検証できます。

パターン

説明

\d+

1桁以上の数字

123, 42にマッチ

\d{3}

ちょうど3桁の数字

123, 999にマッチ

\d{1,5}

1〜5桁の数字

1, 12345にマッチ

\d{2,}

2桁以上の数字

12, 5678にマッチ

例えば、5桁の社員番号を検出する際は下記のように記述します。

string text = "社員情報 A12345, S67890";

string pattern = @"\d{5}";


MatchCollection matches = Regex.Matches(text, pattern);

foreach (Match match in matches)

{

    Console.WriteLine("社員番号: " + match.Value);

}


// 出力

社員番号: 12345

社員番号: 67890

メールアドレスの検証

メールアドレスは、一般的に次のような形式です。

ユーザー名 @ ドメイン名 . TLD

例えばtest.user@example.comのような形式を正規表現でマッチさせます。

パターン

説明

[a-zA-Z0-9._%+-]+

ユーザー名(英数字,.や-を含む)

@

@記号

[a-zA-Z0-9.-]+

ドメイン名

\.[a-zA-Z]{2,}

.com, .net, .jpなどのTLD

これらの正規表現パターンをコードに記述すると下記のようになります。

string email = "user@example.com";

string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";


bool isValid = Regex.IsMatch(email, pattern);

Console.WriteLine("メールアドレスの検証: " + isValid);


// 出力

メールアドレスの検証: True

URLの検出

URLを正規表現で抽出すると、テキスト内のリンクを解析できます。

文章内のURLをすべて抽出する例は下記の通りです。

string text = "公式サイト: https://example.com, 参考: http://test.net";

string pattern = @"https?://[^\s]+";


MatchCollection matches = Regex.Matches(text, pattern);

foreach (Match match in matches)

{

    Console.WriteLine("URL: " + match.Value);

}


// 出力

URL: https://example.com

URL: http://test.net

https?://[^\s]+を使うことで、http://またはhttps://で始まるURLを抽出できます。

日付フォーマットの解析

日付データを扱う際に、特定のフォーマットに一致するかどうかを確認できます。

パターン

説明

\d{4}-\d{2}-\d{2}

YYYY-MM-DD

2025-02-26

\d{2}/\d{2}/\d{4}

MM/DD/YYYY

02/26/2025

\d{2}-\d{2}-\d{4}

DD-MM-YYYY

26-02-2025

日付を検出する例は下記の通りです。

string text = "会議の日程: 2025-03-15";

string pattern = @"\d{4}-\d{2}-\d{2}";


Match match = Regex.Match(text, pattern);

Console.WriteLine("日付: " + match.Value);


// 出力

日付: 2025-03-15

電話番号の抽出

日本の電話番号(市外局番付き)を検出する場合、以下の形式が考えられます。

  • 03-1234-5678(東京の市外局番)

  • 080-1234-5678(携帯番号)

日本の電話番号を検出する例は下記の通りです。

string text = "お問い合わせ: 080-1234-5678 または 03-9876-5432";

string pattern = @"\d{2,4}-\d{4}-\d{4}";


MatchCollection matches = Regex.Matches(text, pattern);

foreach (Match match in matches)

{

    Console.WriteLine("電話番号: " + match.Value);

}


// 出力

電話番号: 080-1234-5678

電話番号: 03-9876-5432

6.C#正規表現で任意の文字列の扱い

任意の文字列を扱うには(.*)や(.+)を使用します。

string pattern = @"開始(.*?)終了";

string text = "開始ここに文章があります終了";


Match match = Regex.Match(text, pattern);

Console.WriteLine(match.Groups[1].Value);


// 出力

ここに文章があります

7.C#正規表現で数字を扱う方法

数字を検出するには(\d+)を使います。

string pattern = @"\d+";

string text = "商品の価格は2500円です。";


Match match = Regex.Match(text, pattern);

Console.WriteLine(match.Value);


// 出力

2500

8.MatchメソッドとIsMatchメソッドの違い

Matchメソッドは一致する文字列を取得するメソッドの一方で、IsMatchメソッドは、一致するかどうかを判定するメソッドです。そのため、用途は異なります。

Matchメソッド

Match()は、一致する文字列を取得します。

Match match = Regex.Match("C#は素晴らしい言語", @"C#");

Console.WriteLine(match.Value);


// 出力

C#

IsMatchメソッド

IsMatch()は、一致するかどうか(true / false)を判定します。

bool isMatch = Regex.IsMatch("C#は素晴らしい言語", @"C#");

Console.WriteLine(isMatch);


// 出力

True


関連記事

C#とは?基本文法や特徴、メリット、開発分野まで初心者に必要な情報をわかりやすく解説

9.まとめ

本記事ではC#の正規表現(Regex)について、基礎から応用まで詳しく解説しました。


正規表現は便利なツールですが、パターンが複雑になると理解しにくくなることもあります。実務でスムーズに活用するためには、頻繁に使う正規表現のパターンを覚え、必要に応じてテストしながら調整することが重要です。


また、正規表現のパフォーマンスを意識することで、より高速で最適な文字列処理を実現できます。RegexOptions.Compiledを活用する、Lazy(最短一致)とGreedy(最長一致)を適切に使い分けるといったテクニックも、今後の開発に役立つでしょう。


本記事が皆様にとって少しでもお役に立てますと幸いです。


フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。


開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。

単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。

無料で登録したらスカウトを待つだけ フリーランスの新しい仕事探しを始めよう

フルリモート案件を 無料登録した方限定で配信中

目次

1.C#の正規表現の基本

正規表現とは?

C#で正規表現を扱う方法

例1:文字列からメールアドレスを抽出する

例2:文字列が数値かどうかを判定する

2.C#正規表現のエスケープ処理

エスケープが必要な特殊文字

エスケープ処理の実例

3.C#正規表現チェッカーとデバッグ

正規表現のテストツール

RegexOptionsを使ったデバッグ

例:大文字・小文字を無視するIgnoreCaseの使用

例:Compiledオプションを使用してパフォーマンスを向上

4.C#で文字列から特定の情報を抽出する

Matchメソッドを使って特定のデータを取得

Matchesメソッドで複数の一致を取得

Match.Groupsを使った詳細なデータ抽出

5.C#正規表現の書き方一覧

文字列の基本的なマッチングパターン

数値データの処理

メールアドレスの検証

URLの検出

日付フォーマットの解析

電話番号の抽出

6.C#正規表現で任意の文字列の扱い

7.C#正規表現で数字を扱う方法

8.MatchメソッドとIsMatchメソッドの違い

Matchメソッド

IsMatchメソッド

9.まとめ