自分用。
文字列の中からメールアドレス部分を抽出する必要があったので、正規表現を使ってメールアドレス部分を抽出するメソッドを作成。
メソッド
メソッド
/// <summary>
/// メールアドレス取得
/// </summary>
/// <param name="str">抽出対象文字列</param>
/// <returns>一致する文字列</returns>
private string[] ExtractionMailAddress(string str)
{
string pat = @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b";
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pat, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.MatchCollection matchCol = regex.Matches(str);
List<string> result = new List<string>();
foreach(System.Text.RegularExpressions.Match m in matchCol) {
result.Add(m.Value);
}
return result.ToArray<string>();
}
解説
特段なし。
一応、自分の環境で入力される想定の文字列を複数与えてうまく検出できた。
戻り値は文字型の配列なので、文字列に複数のメールアドレスを含んでいた場合にも対応する。
当然だけど、スペースやタブ記号などを含まずに2つ以上のメールアドレスが連なっている場合などはそもそもメールアドレスとして破綻しているので検出できない。
【2017/06/28 追記】
juner氏からご指摘頂いたとおり、RFC5321とRFC5322に準拠していないメールアドレスも抽出してしまいます。
docomoとかauとかの一部キャリアメールが非準拠なメールアドレスが使えるようで、これを弾くかどうかという点については利用ケースで考える必要がある。
参考にしたサイト
正規表現を使って文字列を検索し、抽出する: .NET Tips: C#, VB.NET
正規表現サンプル(メールアドレスを検索する)