Jag behöver plocka ut epostadresser ur ett fält där det också finns annan text, och det kan också finnas flera adresser i samma post, och då måste samtliga adresser plockas ut. Jag behövde själv motsvarande kodsnutt så håll till godo : Äsch jag gick ett steg längre. Här kommer en EmailCollection-klass:Extrahera epostadresser
Så här kan datat se ut:
"John Doe
john.doe@anyserver.com
Phone: +1 12 23456
Jim.jimson@jimserver.com"
Det jag behöver få ut av funktionen är adresserna i en sträng för att användas för att skicka mail via VBA: "john.doe@anyserver.com;Jim.jimson@jimserver.com"
Någon som har en bra lösning för det hela?
//TomasSv:Extrahera epostadresser
private void button1_Click(object sender, EventArgs e)
{
string epost = @"([\w-]+\.)*[\w-]+\@([\w-]+\.)+[a-zA-Z]{2,}";
Regex repost = new Regex(epost, RegexOptions.IgnoreCase);
MatchCollection mc = repost.Matches(textBox1.Text);
List<string> adresses = new List<string>();
foreach (Match match in mc)
if (!adresses.Contains(match.ToString()))
{
adresses.Add(match.ToString());
textBox2.AppendText(match.ToString() + ";");
}
}
Två textboxar och en knapp på ett formulär är vad som behövs för att testköra...Jag använder en generisk stränglista för att ta bort dubletter (kräver ramverk 2.0, vs.net 2005). Ersätt med System.Collections.HashTable eller liknande om du använder 1.1 eller 1.0.
Sv: Extrahera epostadresser
public class EmailCollection : System.Collections.Generic.List<string>
{
public const string EMAIL_REGEX = @"([\w-]+\.)*[\w-]+\@([\w-]+\.)+[a-zA-Z]{2,}";
public EmailCollection()
{
}
public EmailCollection ParseText(string Text)
{
Regex reg_email = new Regex(EMAIL_REGEX, RegexOptions.IgnoreCase);
MatchCollection mc = reg_email.Matches(Text);
foreach (Match match in mc)
if (!base.Contains(match.ToString()))
base.Add(match.ToString());
return this;
}
public new EmailCollection Add(string Address)
{
Regex reg_email = new Regex(EMAIL_REGEX, RegexOptions.IgnoreCase);
if (!reg_email.Match(Address).Success)
throw new ArgumentException("Illegal email address!","Address");
if (!base.Contains(Address)) base.Add(Address);
return this;
}
public override string ToString()
{
string list="";
foreach (string email in this)
list += email + ";";
return list;
}
}
Så här använder du klassen :
private void button1_Click(object sender, EventArgs e)
{
EmailCollection ec = new EmailCollection();
textBox2.Text=ec.ParseText(textBox1.Text).Add(@"kalle@kalle.se").ToString();
}