Найдите и извлеките весь адрес электронной почты из текстовой строки, используя c# - PullRequest
1 голос
/ 05 мая 2020

Есть ли способ извлечь все адреса электронной почты из простого текста, используя C#.

Например, эта строка:

[id=4068;name=mrgar@yahoo.com]
[id=4078;name=mrrame@gmail.com]

должна вернуть

mrrame@gmail.com, mrgar@yahoo.com

Я безуспешно пробовал следующий код.

Пожалуйста, не могли бы вы мне помочь?

protected void btnFinal_Click(object sender, EventArgs e)
{
    JavaScriptSerializer jsSer = new JavaScriptSerializer();
    object obj = jsSer.DeserializeObject(hidJsonHolder.Value);
    Movie[] listMovie = jsSer.ConvertToType<Movie[]>(obj);
    foreach (Movie p in listMovie)
    {
        txta.Text += p.ToString();
        const string MatchEmailPattern =
       @"(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@"
       + @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\."
         + @"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
       + @"([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})";
        Regex rx = new Regex(MatchEmailPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
        MatchCollection matches = rx.Matches(p.ToString());
        int noOfMatches = matches.Count;
        foreach (Match match in matches)
        {
            Response.Write(p.ToString() + "<br />");
        }
    }
}

1 Ответ

1 голос
/ 07 мая 2020

Я думаю, что у вас уже есть правильный regular expression для извлечения всего адреса электронной почты из текста.

Однако проблема в том, что вы не используете его правильно.

Правильные шаги следующие:

Используйте regular express (Regex) для сопоставления текста.

Для каждого результата сопоставления в MatchCollection выберите значение из результата сопоставления .

Чтобы сделать Regular expression более понятным, я поместил весь метод Regex в дополнительный метод, который вы могли бы вызывать отдельно для извлечения писем.

Все коды написаны на основе вашего оригинала коды.

Более подробную информацию вы можете найти в кодах ниже.

.aspx Страница:

 <form id="form1" runat="server">
        <div>
            <h1>This is Page</h1>
            <asp:Button ID="btnFinal" runat="server" Text="Click" OnClick="btnFinal_Click" />
            <br />
            <asp:Label ID="displayLabel" runat="server"></asp:Label>
        </div>
    </form>

Скрытый код:

protected void btnFinal_Click(object sender, EventArgs e)
{
    string exampleTxt = @"[id=4068;name=mrgar@yahoo.com][id=4078;name=mrrame@gmail.com]";
    string[] emails = identifyEmailAddress(exampleTxt);
    foreach (string s in emails)
    {
        displayLabel.Text += s + "<br />";
    }
}

private string[] identifyEmailAddress(string txt)
{    
    const string MatchEmailPattern = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
    Regex rx = new Regex(MatchEmailPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
    MatchCollection matches = rx.Matches(txt);
    int noOfMatches = matches.Count;
    string[] result = new string[noOfMatches];
    int i = 0;
    foreach (Match match in matches)
    {
        result[i++] = match.Value.ToString();
    }

    return result;
}

Demo:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...