我想提取Thunderbird电子邮件文件中找到的所有电子邮件地址。有时,电子邮件会在空格中包含,有时在<>中可能还有其他方式。我能够在每个字符串中找到@出现的位置,但是如何在形成电子邮件之前和之后抓取字符?
感谢。
答案 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)
如果你需要一个程序来查找“电子邮件地址提取器和验证器”。