C#の正規表現でマッチ部分の置換を柔軟に行う方法
「Twilog to Evernote Converter」を作る際に、C# の正規表現でマッチした部分を、一律ではなく条件を加工して置換しようとしたら意外に苦労したので、その方法を載せておきます。
C# の正規表現で置換処理をするには、System.Text.RegularExpressions.Regex クラスの Replace メソッドを利用しますが、マッチした部分を一律に置換することは問題ありませんが、ちょっと加工しようと思うと途端に行き詰まります。
正規表現でマッチした部分を柔軟に加工するには、System.Text.RegularExpressions.MatchCollection クラスを利用します。
以下に実際に使用したコードの主要部分を載せますので参考にしてください。
・2011.12.24追記
同じ文字列がマッチした場合に正しく動作しない不具合を修正しました。
using System.Text.RegularExpressions;
private const string TWITTER_URI = "http://twitter.com/";
private string editTeet(string tweet)
{
//URLの部分をリンクに一律で置換
string work = Regex.Replace(tweet,
@"s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+", "<a href=\"$&\">$&</a>");//Twitter のユーザーID にマッチした部分を加工してリンクに置換
Regex reg = new Regex(@"s?@[_a-zA-Z0-9]+");
MatchCollection mc = reg.Matches(work);StringBuilder buf = new StringBuilder();
int lastIndex = 0;foreach (Match item in mc)
{
buf.Append(work.Substring(lastIndex, item.Index - lastIndex));
buf.Append("<a href=\"" + TWITTER_URI + item.Value.Substring(1)
+ "\">" + item.Value + "</a>");
lastIndex = item.Index + item.Length;
}return buf.ToString() + work.Substring(lastIndex);
}
スポンサーリンク
Twitter ではブログにはない、いろんな情報を発信しています。
@fnyaさんをフォロー
コメント