Извлечь весь адрес электронной почты из текста, используя С#
Есть ли способ извлечь все адреса электронной почты из обычного текста с помощью С#.
Например
мой адрес электронной почты - [email protected], а его электронная почта - [email protected]
должен возвращать
[email protected], [email protected]
Я пробовал следующее, но он соответствует только совершенным письмам.
public 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})$";
public static bool IsEmail(string email)
{
if (email != null) return Regex.IsMatch(email, MatchEmailPattern);
else return false;
}
Ответы
Ответ 1
Следующие работы
public static void emas(string text)
{
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);
// Find matches.
MatchCollection matches = rx.Matches(text);
// Report the number of matches found.
int noOfMatches = matches.Count;
// Report on each match.
foreach (Match match in matches)
{
Console.WriteLine(match.Value.ToString());
}
}
Ответ 2
проверить этот фрагмент
using System.IO;
using System.Text.RegularExpressions;
using System.Text;
class MailExtracter
{
public static void ExtractEmails(string inFilePath, string outFilePath)
{
string data = File.ReadAllText(inFilePath); //read File
//instantiate with this pattern
Regex emailRegex = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",
RegexOptions.IgnoreCase);
//find items that matches with our pattern
MatchCollection emailMatches = emailRegex.Matches(data);
StringBuilder sb = new StringBuilder();
foreach (Match emailMatch in emailMatches)
{
sb.AppendLine(emailMatch.Value);
}
//store to file
File.WriteAllText(outFilePath, sb.ToString());
}
}
Ответ 3
Просто удалите "^" с начала и "$" с конца строки фильтра.
Ответ 4
попробуйте http://www.regular-expressions.info/email.html
Ответ 5
Если вы не хотите, чтобы он соответствовал идеальным адресам электронной почты, не используйте регулярное выражение, соответствующее идеальным адресам электронной почты.
Регулярное выражение, которое вы используете, будет совпадать в начале строки (^) и в конце строки ($), поэтому, если вы удалите их, они не будут фильтроваться с ними.