C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で大文字・小文字を区別せずに文字列を置換する方法|Regexを使ったstring.Replaceの代替

C#のReplace()メソッドは、Stringクラスに用意された文字列操作用のメソッドです。現在の文字列内に含まれる指定したUnicode文字や指定した文字列をすべて置き換え、変更後の新しい文字列を返します。引数の組み合わせによって、複数のオーバーロードが提供されています。

ただし、標準のReplace()メソッドには大文字と小文字を厳密に区別するという特徴があります。たとえば「e」と「E」は別の文字として扱われるため、大文字・小文字を問わず置換したいケースにはそのままでは対応できません。

このような場合は、正規表現(Regexクラス)を活用するのが効果的です。正規表現はテキスト処理のための強力かつ柔軟で効率的な手法であり、豊富なパターンマッチング記法によって大量のテキストを高速に処理できます。主な用途は次のとおりです。

  • 特定の文字パターンの検索
  • テキストが定義済みのパターン(メールアドレスなど)に一致しているかの検証
  • 部分文字列の抽出・編集・置換・削除
  • 抽出した文字列をコレクションに追加してレポートを生成

例1:通常のReplace()メソッドの動作

まず、標準のReplace()メソッドを使った基本例を確認しましょう。ここでは文字「e」を「E」に置き換えています。

class Program{
    static void Main(string[] args){
        String str = "Cricket Team";
        Console.WriteLine("OldString : " + str);
        Console.WriteLine("NewString: " + str.Replace('e', 'E'));
        Console.WriteLine("\nOldString: " + str);
        Console.ReadLine();
    }
}

出力結果

OldString : Cricket Team
NewString: CrickEt TEam
OldString: Cricket Team

ご覧のとおり、Replace()メソッドは元の文字列を変更せず、新しい文字列を返します(String型は不変・immutableであるためです)。また、小文字の「e」だけが置き換えられ、大文字の「E」はそのまま残る点にも注目してください。

例2:Regexで大文字・小文字を区別せずに置換する

大文字と小文字を区別せずに置換するには、RegexクラスのReplaceメソッドとRegexOptions.IgnoreCaseオプションを組み合わせます。以下は、独自のCaseInsensitiveReplaceメソッドを実装した例です。

static void Main(string[] args){
    String str = "Cricket Team";
    Console.WriteLine("OldString : " + str);
    Console.WriteLine("NewString: " + CaseInsensitiveReplace("Cricket Team", "t", "b"));
    Console.WriteLine("\nOldString: " + str);
    Console.ReadLine();
}

static string CaseInsensitiveReplace(string originalString, string oldValue, string newValue){
    Regex regEx = new Regex(oldValue,
    RegexOptions.IgnoreCase | RegexOptions.Multiline);
    return regEx.Replace(originalString, newValue);
}

出力結果

OldString : Cricket Team
NewString: Crickeb beam
OldString: Cricket Team

この例では、検索対象の文字「t」にRegexOptions.IgnoreCaseを指定しているため、小文字の「t」だけでなく大文字の「T」もまとめて「b」に置き換えられています。その結果、「Cricket Team」が「Crickeb beam」に変換されました。

ポイントのまとめ

  • RegexOptions.IgnoreCase:大文字と小文字の違いを無視してマッチングを行います。
  • RegexOptions.Multiline:複数行テキストの各行を個別の行として扱えるようにします。
  • RegexのReplaceメソッドも、元の文字列は変更せず新しい文字列を返します。

単純な文字置換であれば標準のReplace()メソッドで十分ですが、大文字・小文字を区別したくない場合や、より複雑なパターンで置換したいケースでは、正規表現を使うことで柔軟かつ確実に対応できます。

  1. ASP.NET MVC(C#)のViewDataとは?基本的な使い方と注意点を解説

    ViewDataは、文字列をキーとしてオブジェクトを格納・取得できるディクショナリです。主に、コントローラーからビューへデータを受け渡すために使用されます。ViewDataはディクショナリ構造を持つため、キーと値のペアでデータを管理し、キーは必ず文字列である必要があります。なお、ViewDataによるデータの受け渡しはコントローラーからビューへの一方方向のみで、その逆(ビューからコントローラー)はできません。また、格納されたデータは現在のリクエストの間でのみ有効という特徴があります。ViewDataへのデータの格納ViewData[countries] = countriesList;View

  2. JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説

    StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T