0

私の意見では、それは一般的なシナリオです

文字列は次のようなものです:

"this is my story, if it's interesting somemail@domain.com so thanks for your time"

私はそれを次のようにする必要があります

"this is my story, if it's interesting  so thanks for your time"
"somemail@domain.com"

今のところ私のコードは「@」のインデックスからカウントダウンしようとしているので、forループの反復内でチェックする回数が少なくなります

        public string formatResultContentAndEmail(string source)
        {
            char[] Str2CahrArr = source.ToCharArray();
            var trgt = source.IndexOf('@');
            var stepsBack=0;
            for (int i = trgt; i >0; i--)
            {
                var test = Str2CahrArr[i];
                if (Str2CahrArr[i].Equals(" "))
                {
                    stepsBack = i; break;
                }
            }

            return "";//<======change this when done tests
        }

その試みでの私の最初の問題は、スペースにぶつかったときに見つけることができなかったことです。

しかし、私がその問題を解決するときでさえ、そのアプローチは正しいものですか?

その完全な段落のメール部分文字列を抽出する最も簡単な方法は何ですか?

4

3 に答える 3

3

おそらく、実際のメールを検索するより優れた正規表現のアプローチがあるでしょう。これは読みやすく効率的です。

string text = "this is my story, if it's interesting somemail@domain.com so thanks for your time";
if(text.Contains('@'))
{
    string[] words = text.Split();
    string[] emails = words.Where(word => word.Contains('@')).ToArray();
    text = string.Join(" ", words.Where(word => !word.Contains('@')));
}

デモ

this is my story, if it's interesting so thanks for your time
somemail@domain.com
于 2013-05-31T23:22:54.830 に答える
1
public string[] ExtractEmails(string str)
{
    string RegexPattern = @"\b[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}\b";

    // Find matches
    System.Text.RegularExpressions.MatchCollection matches = System.Text.RegularExpressions.Regex.Matches(str, RegexPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase);

    string[] MatchList = new string[matches.Count];

    // add each match
    foreach (System.Text.RegularExpressions.Match match in matches)
        MatchList[c] = match.ToString();

    return MatchList;
}

ソース: http://coderbuddy.wordpress.com/2009/10/31/coder-buddyc-code-to-extract-email/

より良い正規表現パターンが必要な場合は、おそらくhttp://www.regular-expressions.info/で見つけることができます。

于 2013-05-31T23:22:36.343 に答える
0

String.split() を使用して、私の提案は次のようになります

public String getMail(String inp) {
  String[] prts = inp.split(" ");
  for(String tmp : prts) {
    if(tmp.contains("@")) {
      return tmp;
    }
  }
}

これは、複数の電子メールを含む文字列で壊れますが、その修正は簡単です。

于 2013-05-31T23:21:01.683 に答える