行頭の空白を に置換する(行頭の文字の置換 - Regex,MatchEvaluatorを利用) - C#

Regexクラスを使って行頭のスペースを に置換する方法を紹介します。

仕様

行頭のスペースを" "に置換します。ただし、先頭から4文字空白があった場合は、"    "となります。 正規表現のパターンだけでは行頭の空白を" "に置換することができないため、Regex.ReplaceメソッドのMatchEvaluatorデリゲートを使用します。

MatchEvaluatorを利用する方法

コード例

textBox1に入力したテキストの先頭のスペースを に置換してtextBox4に表示します。
private void button2_Click(object sender, EventArgs e)
{
  textBox4.Text = Regex.Replace(textBox1.Text, @"^ +", 
    new System.Text.RegularExpressions.MatchEvaluator(MatchEvaluate));
}

private static string MatchEvaluate(System.Text.RegularExpressions.Match m)
{
  string str="";
  for (int i=0; i<m.Length; i++){
    str += "&nbsp;";
  }
  return str;
}

解説

Regex.Replace(...)
にて置換を実行します。マッチパターンは先頭の空白部分を検出する"^ +"にします。置換パターンはMatchEvaluator内で処理するため、置換パターンは引数にとりません。
入力文字列に対して検索が実行され、マッチパターンにヒットするとMatchEvalatorが呼び出されます。上記のコードの場合はMatchEvaluate()メソッドが呼び出されます。
MatchEvaluateメソッドではマッチしたMatchクラスが参照できます。ここでマッチした文字数を求め、文字数分の"&nbsp;"文字を用意します。(マッチした文字の長さが4文字ならば"&nbsp;&nbsp;&nbsp;&nbsp;"という文字列を用意します。)
入力文字のマッチした部分がreturnで返却した文字列に更新されます。

実行結果



参考 (MatchEvaluatorを使わない実装)

MatchEvaluatorを使わない場合は、MatchクラスとStringBuilderで同等の処理ができます。

コード例

textBox1に入力したテキストの先頭のスペースを&nbsp;に置換してtextBox4に表示します。
private void button3_Click(object sender, EventArgs e)
{
  Regex spreg = new Regex(@"^ +");
  Match match = spreg.Match(textBox1.Text);
  StringBuilder sb = new StringBuilder(textBox1.Text);
  sb = sb.Replace(" ", "&nbsp;", match.Index, match.Length);
  textBox4.Text = sb.ToString();
}

解説

以下のコードで行頭の空白を検索します。
 Regex spreg = new Regex(@"^ +");
 Match match = spreg.Match(textBox1.Text);

StringBuilderを用意しtextBox1の内容で初期化します。
 StringBuilder sb = new StringBuilder(textBox1.Text);

マッチした部分の範囲で空白を"&nbsp;"に置換します。
 sb = sb.Replace(" ", "&nbsp;", match.Index, match.Length);

StringBuilderの内容をtextBox4に表示します。
 textBox4.Text = sb.ToString();

参考:正規表現パターンで置換する方法

先頭の複数の空白を1つの"&nbsp;"に置換する場合であれば、下記のコードで実現可能です。

コード例

textBox1に入力したテキストの先頭のスペースを&nbsp;に置換してtextBox2に表示します。
  Regex reg = new Regex(@"^ +", RegexOptions.Multiline);
  string result = reg.Replace(textBox1.Text, "&nbsp;");
  TextBox_Output.Text = result;

解説

Regex.Replace(...) で置換を実行します。マッチパターンは先頭の空白部分を検出する"^ +"にします。置換パターンは"&nbsp;"とします。 RegexOptions.Multiline を指定することで、"^"の表現で文頭だけではなく、改行された各行の行頭にもマッチします。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2021-08-24
作成日: 2010-12-31
iPentec all rights reserverd.