
【C#正規表現の使い方2】Replaceメソッドで文字列を置換する
「Replace」を日本語にすると「交換する」のような意味となりますが、Replaceメソッドはその名のとおり、文字列を置換する役割があります。
この記事では、正規表現を使用した文字列の置換を紹介します。アプリケーションを作成する中でも役に立つメソッドだと思うので、ぜひ参考にしてみてください。
- PG
- 仕様書に「数値部分を『*』に変換して出力」とあるのですが、1文字ずつ判別して変換していけば良いのでしょうか?
- PL
- 確かに1文字ずつ判別しても実現可能ですね。ただ便利なメソッドも用意されているので、「C#」「正規表現」「置換」をヒントに調べてみてください。
実行環境
・Windows 10 Home
・Visual Studio Community 2019
目次
Regex.Replaceメソッドの概要
C#で正規表現を使用した文字列の置換を行う場合、Regex.Replaceメソッドを使用します。正規表現の使用により、通貨記号文字や空白、番号付きグループなども簡単に置換できるようになります。
Regex.Replaceメソッドには複数の定義が存在しますが、主なパターンを例に挙げて紹介します。基本の構文は下記のとおりです。
1 |
String Replase(String 入力文字列, String 置換文字列) |
正規表現パターンを指定したRegexのインスタンスを生成後、Replaceメソッドを呼び出します。入力文字列のうち、指定された正規表現パターンに一致する文字列を、置換文字列に置き換えます。
文字列を指定した置換
まずは、シンプルに文字列を指定して置換します。
1 2 3 4 5 6 7 8 |
Regex regex = new Regex(@"【氏名】); String input = @"私の名前は【氏名】です。"; String replace = @"山田"; Console.WriteLine($"置換前:{input}"); Console.WriteLine($"置換後:{regex.Replace(input, replace)}"); // → 出力結果は以下となります。 // 置換前:私の名前は【氏名】です。 // 置換後:私の名前は山田です。 |
次は、正規表現を使用して文字列を置換してみましょう。
今回使用する正規表現パターンは以下のものです。
パターン | 説明 |
---|---|
\d | 数値(0~9) |
\s+ | 空白文字 |
+ | 1回以上の一致 |
1 2 3 4 5 6 7 8 |
Regex regex = new Regex(@"\d"); String input = @" TEL:000-0000"; String replace = @"*"; Console.WriteLine($"置換前:{input}"); Console.WriteLine($"置換後:{regex.Replace(input, replace)}"); // → 出力結果は以下となります。 // 置換前:TEL:000-0000 // 置換後:TEL:***-**** |
1 2 3 4 5 6 7 8 |
Regex regex = new Regex(@"\s+"); String input = @"1 2 3"; String replace = @"-"; Console.WriteLine($"置換前:{input}"); Console.WriteLine($"置換後:{regex.Replace(input, replace)}"); // → 出力結果は以下となります。 // 置換前:1 2 3 // 置換後:1-2-3 |
番号付きグループの置換
正規表現を( )で囲むことにより、一致する部分文字列をグループ化することができます。
今回新たに使用する正規表現パターンは以下のものです。
パターン | 説明 |
---|---|
( ) | 一致する部分文字列をグループ化※ |
\D | 数値以外 |
? | 0回または1回の一致 |
※グループは1から順番に割り当てられ、最初のグループを置換時に参照したい場合は「$1」で表現する。
それでは、グループ化を使用して、部分置換を行ってみましょう。
1 2 3 4 5 6 7 8 |
Regex regex = new Regex(@"\D+(\d+\s?)"); String input = @"A001 B999"; String replace = @"Z$1"; Console.WriteLine($"置換前:{input}"); Console.WriteLine($"置換後:{regex.Replace(input, replace)}"); // → 出力結果は以下となります。 // 置換前:A001 B999 // 置換後:Z001 Z999 |
数値の部分がグループ化されて、先頭をZに置換して出力されていますね。
- PG
- なるほど、このようなメソッドは知らなかったので大変勉強になりました!正規表現を使っていろいろなバリエーションを試してみます。
- PL
- 知らないことを自分で調べて身につけていくことは、とても大切なことです。これからも頑張ってくださいね。
正規表現を使えば簡単に文字列を置換できる
今回はRegex.Replaceを使用した文字列の置換を紹介しました。最初は正規表現を難しく感じるかもしれませんが、使い慣れてくると大変便利に文字列を置換することができます。
この機会に是非活用してみてください。