C#では、文字列を検索する方法の一つに「正規表現」というものが存在します。
正規表現を用いると、文字列の検索などをする際に完全一致するものだけでなく、一定のパターンに合致する文字列全てを検索することができたりと非常に便利な機能です。
そこで今回は、正規表現の具体的な使用方法について解説していきたいと思います!
正規表現とは?
正規表現とは、文字列のパターンを特定の形式にまとめるための表現方法のことを指します。
任意のフォーマットに文字列がマッチするかを判定したり、文字列の抽出や置換を行いたい場合に正規表現を活用することで柔軟な検索・置換ができるようになります。
C#の正規表現では、メタ文字と呼ばれる特殊文字を組み合わせて文字列のパターンを表現します。
以下は、代表的なメタ文字の一覧です。
【文字クラス】…指定したいずれかの文字が含まれると一致と見なす文字セットを定義します。
文字クラス | 説明 |
---|---|
[ ] | [ ]内のいずれか1文字。[abc]ならば、aかbかcのどれか。 |
[^ ] | [ ]内の文字以外。[^abc]ならば、aかbかc以外のどれか。 |
[ – ] | 連続する文字範囲のいずれか1文字。[0-9]ならば数字1文字、[a-zA-Z]ならばアルファベット1文字など。 |
. | 改行文字(\n)以外のいずれか1文字。(ただし [ ] 内ではドット文字として判定) |
\s | 半角/全角スペース文字、改行文字、タブ文字などの空白文字。\Sの場合はそれ以外。 |
\w | 英数字やひらがな、カタカナ、漢字、アンダーバー(_)などの単語文字。\Wの場合はそれ以外。 |
\d | 全角を含む0から9までの数字。\Dの場合はそれ以外。 |
\ | エスケープ文字。特殊文字を通常の文字として扱いたい場合などに使用する。 |
【量指定子】…直前に記述した正規表現が何回繰り返すかを指定します。
量指定子 | 説明 |
---|---|
* | 0回以上の繰り返し |
+ | 1回以上の繰り返し |
? | 0回または1回 |
{n} | n回の繰り返し |
{n, m} | n回からm回の繰り返し |
{n, } | n回以上の繰り返し |
【アンカー(位置指定)】…先頭や末尾、単語境界など、文字列内での位置を指定します。
アンカー | 説明 |
---|---|
^ | 文字列または行の先頭 |
$ | 文字列または行の末尾(末尾が\nの場合はその前の文字) |
\A | 文字列の先頭 |
\z | 文字列の末尾 |
\Z | 文字列の末尾(末尾が\nの場合はその前の文字) |
\G | 前回の終了箇所 |
\b | 単語境界 |
\B | 単語境界以外 |
これらのメタ文字を使用して、検索したい文字列のパターンを表現します。
IsMatchメソッドで正規表現パターンに一致するか判定する
文字列が指定パターンに一致するかを判定する場合は、RegexクラスのIsMatchメソッドを使用しましょう。
IsMatchメソッドは、検索対象の文字列に指定の内容が含まれているかを判断し、その結果をBool値で返します。
【基本構文】
Regex.IsMatch(検索元の文字列, 検索内容)
以下のサンプルコードで、具体的な使用方法について確認してみましょう。
【サンプルコード】
using System.Text.RegularExpressions;
string str = "12345";
// 数字のみの文字列であるかを判定
bool result1 = Regex.IsMatch(str, @"^\d+$");
bool result2 = Regex.IsMatch(str, @"^[0-9]+$");
Console.WriteLine(result1);
Console.WriteLine(result2);
【実行結果】
True
True
上記のサンプルでは、検索元の文字列が数字のみで構成されているかを判定しています。
正規表現は2つのパターンを記述していますが、どちらも得られる結果は同じです。このように、パターンによっては複数の方法で表現することもできます。
また、C#で正規表現を使用する場合は、@記号を頭に付けて記述しましょう。@記号を使わずに記述すると、以下の例のようにバックスラッシュをエスケープする必要があり、記述内容によっては可読性が下がる原因となってしまいます。
【記述例】
bool result1 = Regex.IsMatch(str, "^\\d+$");
正規表現パターンに一致する文字列を抽出する
続いて、検索パターンに一致する文字列を抽出する方法について見ていきましょう。
Matchメソッドでパターンに一致した最初の部分を抽出する
文字列の抽出を行いたい場合は、Matchメソッドを使用します。基本構文は、IsMatchメソッドの時とほとんど同じ内容です。
【基本構文】
Regex.Match(検索元の文字列, 検索内容);
IsMatchメソッドではBool値が返されますが、MatchメソッドはMatchオブジェクトを戻り値として返します。プロパティの1つであるValueを使用することで、検索内容に一致した文字列を取得することができます。
以下のサンプルコードで実際の動きを見てみましょう。
【サンプルコード】
using System.Text.RegularExpressions;
string str = "123,456,789";
Match matche = Regex.Match(str, @"\d+");
Console.WriteLine(matche.Value);
【実行結果】
123
このように、Matchメソッドを使用して文字列を取得することができます。
ただし、実行結果を見ると分かると思いますが、検索パターンに一致する文字列が複数箇所に分かれている場合には、最初にマッチした文字列のみしか取得できません。
全ての一致する文字列を取得したい場合は、次の項目で紹介するMatchesメソッドを使用しましょう。
Matchesメソッドでパターンに一致する全ての部分を抽出する
次に、Matchesメソッドの使用方法を解説していきます。
基本構文はこれまでと同様ですが、Matchesメソッドの場合はMatchCollectionオブジェクトが返されます。
以下のサンプルコードで確認してみましょう。
【サンプルコード】
using System.Text.RegularExpressions;
string str = "123,456,789";
MatchCollection matches = Regex.Matches(str, @"\d+");
foreach (Match m in matches)
{
Console.WriteLine(m.Value);
}
【実行結果】
123
456
789
MatchCollectionオブジェクト内に結果が内包されているので、foreach文で取り出して出力しています。
先ほどのサンプルでは取得されていなかった残りの文字列も、この方法で抽出することができました。
Replaceメソッドで正規表現パターンに一致する文字列を置換する
最後に、RegexクラスのReplaceメソッドで文字列を置換する方法について紹介します。
Replaceメソッドは、指定パターンに一致する文字列を別の文字列に置換するメソッドです。
【基本構文】
Regex.Replace(検索元の文字列, 検索内容, 置換する文字列)
以下のサンプルコードで動作を確認してみましょう。
【サンプルコード】
using System.Text.RegularExpressions;
string result = Regex.Replace("AbCd", @"[a-z]", ",");
Console.WriteLine(result);
【実行結果】
A,C,
StringクラスにもReplaceメソッドはありますが、正規表現を使って複雑なパターンに対応できるのがこのメソッドの特徴です。
まとめ
C#の正規表現について、基礎となる部分を順番に解説しました。
記号をいくつも組み合わせる正規表現パターンの記法は、はじめのうちは少々複雑に感じるかもしれません。
ですが、正規表現を一度覚えておくと、値の操作を行う様々な場面で役に立ちます。
ぜひこの記事も参考にしながら、使いこなせるように頑張ってみてくださいね!
C#の勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、C#に限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。