C#の正規表現(Regex)で文字列を操作する基本を学ぼう
生徒
「先生、C#で文字列の中から特定のパターンを探したり、置き換えたりする方法ってありますか?」
先生
「いい質問ですね。そういうときに使うのが『正規表現(Regex)』という機能です。」
生徒
「正規表現って聞いたことはありますけど、難しそうです……。C#でも使えるんですか?」
先生
「もちろん使えますよ。最初は少し慣れが必要ですが、C#のRegexクラスを使えば簡単に文字列を検索・置換できます。では、基本から見ていきましょう!」
1. 正規表現(Regex)とは?
正規表現(せいきひょうげん)とは、「文字列の中に特定のパターンを見つけるためのルール(式)」のことです。たとえば、メールアドレスの形式を確認したり、数字だけを取り出したりする場合に使われます。
C#では、System.Text.RegularExpressions名前空間にあるRegexクラスを使うことで、正規表現を簡単に扱うことができます。
難しく聞こえるかもしれませんが、「パターンに合う文字を探すツール」と考えるとイメージしやすいです。
2. Regexを使って文字列を検索する基本
まずは、特定の単語が文字列の中に含まれているかどうかを調べる例を見てみましょう。C#では、Regex.IsMatchメソッドを使います。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "今日はC#のRegexを勉強します。";
string pattern = "Regex";
bool result = Regex.IsMatch(text, pattern);
if (result)
{
Console.WriteLine("指定した文字が見つかりました!");
}
else
{
Console.WriteLine("指定した文字は見つかりませんでした。");
}
}
}
指定した文字が見つかりました!
この例では、Regex.IsMatchを使って文字列に「Regex」という単語が含まれているかを調べています。true(真)なら見つかり、false(偽)なら見つからなかったという結果が返ります。
3. 正規表現で数字だけを抜き出してみよう
正規表現の強みは、「特定のパターンに一致する部分だけを取り出せる」ことです。たとえば、文章の中から数字だけを抜き出したいときに便利です。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "商品番号は12345です。";
string pattern = @"\d+"; // 「\d+」は1つ以上の数字を意味します。
Match match = Regex.Match(text, pattern);
if (match.Success)
{
Console.WriteLine("見つかった数字: " + match.Value);
}
}
}
見つかった数字: 12345
\d+というパターンは、「1つ以上の数字」を意味します。Regex.Matchメソッドを使うと、最初に見つかった一致部分を取得できます。正規表現ではこのように、「文字の形」をルールで表現することができます。
4. 文字列の一部を置き換える(Regex.Replace)
次に、Regex.Replaceを使って文字列の一部を別の文字に置き換える方法を学びましょう。これは、電話番号や郵便番号などのフォーマットを整えるときにも使われます。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "電話番号は08012345678です。";
string pattern = @"(\d{3})(\d{4})(\d{4})";
string replacement = "$1-$2-$3"; // 正規表現のグループを利用して区切る
string result = Regex.Replace(text, pattern, replacement);
Console.WriteLine(result);
}
}
電話番号は080-1234-5678です。
この例では、数字を3桁・4桁・4桁のグループに分けて、それぞれにハイフン(-)を挟んでいます。$1・$2・$3は、それぞれグループ化された部分を指します。
正規表現を使えば、ただの文字列検索だけでなく、柔軟な置換処理もできるのです。
5. よく使う正規表現パターンの例
ここで、C#でよく使われる正規表現パターンをいくつか紹介します。これを覚えておくと、文字列操作が一気に便利になります。
- \d:数字(0~9)に一致
- \w:英数字やアンダースコアに一致
- \s:空白文字(スペースやタブ)に一致
- .+:任意の文字が1文字以上
- ^:行の先頭
- $:行の末尾
たとえば、メールアドレスを判定する場合は次のようなパターンを使います。
string pattern = @"^[\w\.-]+@[\w\.-]+\.\w+$";
このように、正規表現をうまく使うことで、文字列のチェックや整形を自動化できます。
6. Regexオブジェクトを使って繰り返し検索する
複数の一致箇所をすべて取得したいときは、Regex.Matchesを使います。これで、文字列の中にあるすべての数字を抜き出すことができます。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "合計100円と200円と300円です。";
string pattern = @"\d+";
MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
}
}
100
200
300
このように、Regex.Matchesを使えば、文章中にあるすべての数値をリストのように取り出せます。C#でデータを集計したり、特定の形式を確認したりする際にとても便利です。
7. まとめると
この記事では、C#のRegexクラスを使って文字列を検索・抽出・置換する方法を学びました。最初は難しそうに感じるかもしれませんが、ルールを少しずつ覚えることで、複雑な文字列処理をシンプルに書けるようになります。
正規表現は、C#だけでなく他のプログラミング言語でも共通して使われる重要な技術です。ぜひ、実際にコードを打ちながら慣れていきましょう。