C#で文字列を検索する方法まとめ|Contains, IndexOf, 正規表現などの使い方を解説

C#でプログラムを組んでいると、特定の文字列を含んでいるかどうか調べたり、文字列の位置を取得したりする場面は頻繁にあります。文字列検索の方法をしっかり理解しておくと、データ処理やユーザー入力の検証などで大いに役立ちます。
本記事では、C#における代表的な文字列検索の方法について、実例コードを交えながら解説していきます。基本的なContainsIndexOfから、正規表現(Regex)を用いた高度な検索まで、幅広くカバーしていますので、初心者から中級者まで参考になる内容です。


Containsメソッドで部分一致をチェックする

Containsメソッドは、ある文字列が別の文字列に含まれているかどうかを調べるシンプルな方法です。戻り値はbool型で、見つかればtrue、なければfalseを返します。

string text = "C#はとても楽しい言語です。";
bool result = text.Contains("楽しい");
Console.WriteLine(result); // 出力: True

注意点: Containsは大文字と小文字を区別します(case-sensitive)。大文字小文字を無視したい場合は、ToLower()StringComparisonを使います。

bool result = text.Contains("楽しい", StringComparison.OrdinalIgnoreCase);

IndexOfメソッドで文字列の位置を取得する

IndexOfメソッドは、検索対象の文字列が最初に現れる位置(インデックス)を返します。見つからない場合は-1を返します。

string message = "メールアドレスを入力してください。";
int index = message.IndexOf("アドレス");
Console.WriteLine(index); // 出力: 2

部分一致の開始位置を知りたい場合に非常に有効です。

大文字小文字を無視した検索:

int index = message.IndexOf("アドレス", StringComparison.OrdinalIgnoreCase);

StartsWithとEndsWithで前方・後方一致を確認する

文字列が特定の文字列で始まっているか、または終わっているかをチェックするには、StartsWithEndsWithメソッドを使います。

string fileName = "report_2025.pdf";
bool starts = fileName.StartsWith("report");
bool ends = fileName.EndsWith(".pdf");
Console.WriteLine(starts); // True
Console.WriteLine(ends); // True

ファイル名やURLなどの判定に役立ちます。


正規表現(Regex)で柔軟な検索を行う

System.Text.RegularExpressions.Regexクラスを使えば、より高度で柔軟な検索が可能になります。
例えば、電話番号やメールアドレスのパターンに一致するかどうかのチェックができます。

using System.Text.RegularExpressions;

string input = "お問い合わせは 090-1234-5678 まで。";
bool match = Regex.IsMatch(input, @"\d{3}-\d{4}-\d{4}");
Console.WriteLine(match); // 出力: True

マッチした部分を抽出する:

Match m = Regex.Match(input, @"\d{3}-\d{4}-\d{4}");
if (m.Success)
{
Console.WriteLine("見つかった電話番号: " + m.Value);
}

Splitとforeachで部分検索のような処理を行う

複数の語句を区切って、それぞれを調べたい場合は、Splitメソッドとループを組み合わせることで、柔軟な処理が可能です。

string sentence = "C#, Java, Python, JavaScript";
string[] languages = sentence.Split(',');

foreach (string lang in languages)
{
if (lang.Trim().Contains("Java"))
{
Console.WriteLine("Javaを含む文字列: " + lang.Trim());
}
}

H2: LINQを使って複数の文字列から検索する

配列やリストなどの中から、特定の文字列を含む要素を検索したい場合は、LINQが便利です。

using System.Linq;

List<string> items = new List<string> { "赤いリンゴ", "青い空", "黄色いバナナ" };
var result = items.Where(x => x.Contains("リンゴ"));

foreach (var r in result)
{
Console.WriteLine(r); // 赤いリンゴ
}

Where句とContainsを組み合わせることで、複雑な検索も簡潔に書けます。


検索方法を使い分けるコツ

目的に応じて検索方法を使い分けることが重要です。以下のようにまとめられます。

検索目的使用メソッド
単純な部分一致Contains
文字列の位置を知りたいIndexOf
前方・後方一致StartsWith / EndsWith
パターンマッチングRegex
配列・リストから探すLINQ(Where + Contains)

また、大文字と小文字の区別が必要かどうか、文字コードの違い(Unicodeなど)にも注意が必要です。


まとめ

C#では文字列を検索するためのメソッドが豊富に用意されています。
ContainsIndexOfなどの基本から、Regexによる正規表現まで、場面に応じて最適な方法を選ぶことで、より効率的なコードを書くことができます。

検索条件に合わせて適切なメソッドを使い分けることが、バグの少ない、可読性の高いプログラムにつながります。
ぜひ本記事を参考に、あなたのプロジェクトにも役立ててください。

タイトルとURLをコピーしました