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);