C#の正規表現

2018/05/12

C#で置換

郵便番号からハイフンを削除

zip = zip.Replace("-","");

逆にハイフンを挿入する場合

// キャプチャの結果が保存される$1、$2が""の中に入っていることに注意
// Perlと違い外に出すと怒られます
zip = Regex.Replace(zip, @"(\d{3})(\d{4})","$1-$2");

複数行にマッチさせる

複数行にマッチさせたいので RegexOptions.Multiline かと思ったら RegexOptions.Singleline が正解。
string html = @"<head>
<style>
body{
}
</style>
</head>
";
var plaintext = Regex.Replace(html, @"<style(.*?)style>", "",
 RegexOptions.Singleline);

オプションを複数指定する

「|」で区切る
例:大文字小文字を無視して複数行にマッチさせる
var plaintext = Regex.Replace(html, @"<(?!img|br)(.|\s)*?>", "",
 RegexOptions.Singleline|RegexOptions.IgnoreCase);

エスケープ

// 特別な意味を持つ、エスケープが必要な文字
// . $ ^ { [ ( | ) * + ? \

// \マーク(バックスラッシュ)でエスケープ
string html = @"aaa.bbb$cccc*ddd";
var plaintext = Regex.Replace(html, @"[\.\$\*]", "",
 RegexOptions.Singleline);

// ただし逐語的リテラル文字列(@"")内における"のエスケープは"
// こちらはまだしも
string html = @"<div style=""color:red;"">test
</div>
";
// "が3つ並ぶとか嫌すぎる…
var plaintext = Regex.Replace(html, @"style="".*""", "",
 RegexOptions.Singleline);
OK キャンセル 確認 その他