从Thunderbird电子邮件中提取电子邮件地址

时间:2011-06-02 13:11:30

标签: delphi

我想提取Thunderbird电子邮件文件中找到的所有电子邮件地址。有时,电子邮件会在空格中包含,有时在<>中可能还有其他方式。我能够在每个字符串中找到@出现的位置,但是如何在形成电子邮件之前和之后抓取字符?

感谢。

2 个答案:

答案 0 :(得分:5)

Regex就是为这种工作而生的。这是一个最小的控制台应用程序,它显示了如何使用RegEx从一个长文本块中提取所有电子邮件地址:

program Project25;

{$APPTYPE CONSOLE}

uses
  SysUtils, PerlRegex;

var PR: TPerlRegEx;
    TestString: string;

begin

  // Initialize a test string to include some email addresses. This would normally
  // be your eMail text.
  TestString := '<one@server.domain.xy>, another@otherserver.xyz';

  PR := TPerlRegEx.Create;
  try
    PR.RegEx := '\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'; // <-- this is the actual regex used.
    PR.Options := PR.Options + [preCaseLess];
    PR.Compile;
    PR.Subject := TestString; // <-- tell the TPerlRegEx where to look for matches
    if PR.Match then
    begin
      // At this point the first matched eMail address is already in MatchedText, we should grab it
      WriteLn(PR.MatchedText); // Extract first address (one@server.domain.xy)
      // Let the regex engine look for more matches in a loop:
      while PR.MatchAgain do
        WriteLn(PR.MatchedText); // Extract subsequent addresses (another@otherserver.xyz)
    end;
  finally PR.Free;
  end;

  Readln;
end.

请参阅此处了解如何为旧版本的Delphi获取正则表达式: http://www.regular-expressions.info/delphi.html

答案 1 :(得分:0)

如果你需要一个程序来查找“电子邮件地址提取器和验证器”。