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 += " ";
}
return str;
}
解説
Regex.Replace(...)
にて置換を実行します。マッチパターンは先頭の空白部分を検出する"^ +"にします。置換パターンはMatchEvaluator内で処理するため、置換パターンは引数にとりません。
入力文字列に対して検索が実行され、マッチパターンにヒットするとMatchEvalatorが呼び出されます。上記のコードの場合はMatchEvaluate()メソッドが呼び出されます。
MatchEvaluateメソッドではマッチしたMatchクラスが参照できます。ここでマッチした文字数を求め、文字数分の" "文字を用意します。(マッチした文字の長さが4文字ならば" "という文字列を用意します。)
入力文字のマッチした部分がreturnで返却した文字列に更新されます。
実行結果
参考 (MatchEvaluatorを使わない実装)
MatchEvaluatorを使わない場合は、MatchクラスとStringBuilderで同等の処理ができます。
コード例
textBox1に入力したテキストの先頭のスペースを に置換して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(" ", " ", 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);
マッチした部分の範囲で空白を" "に置換します。
sb = sb.Replace(" ", " ", match.Index, match.Length);
StringBuilderの内容をtextBox4に表示します。
textBox4.Text = sb.ToString();
参考:正規表現パターンで置換する方法
先頭の複数の空白を1つの" "に置換する場合であれば、下記のコードで実現可能です。
コード例
textBox1に入力したテキストの先頭のスペースを に置換してtextBox2に表示します。
Regex reg = new Regex(@"^ +", RegexOptions.Multiline);
string result = reg.Replace(textBox1.Text, " ");
TextBox_Output.Text = result;
解説
Regex.Replace(...)
で置換を実行します。マッチパターンは先頭の空白部分を検出する"^ +"にします。置換パターンは" "とします。
RegexOptions.Multiline を指定することで、"^"の表現で文頭だけではなく、改行された各行の行頭にもマッチします。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2021-08-24
作成日: 2010-12-31