如何从文件中提取含EMail地址呢(100分)

  • 主题发起人 主题发起人 goddy
  • 开始时间 开始时间
G

goddy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何从文件中提取含EMail地址呢
 
查找"@"字符,而且email地址和其他文字只见一定要隔开,否则呵呵..
比如 naughtboy@163.com一定要和后面的文字分开
 
用正则表达式呀
[_a-zA-Z/d/-/.]+@[_a-zA-Z/d/-]+(/.[_a-zA-Z/d/-]+)+
 
应该要分开吧
 
从文档里分离,有什么好办法吗?估计挺烦的。
能不能从设计思路上调整一下,不让Mail混在文档里面?


 
我自己搞定了﹐大家有什么好建意﹐提一提
#include <stdio.h>
String GetEmail(String FileName)
{
FILE *in, *in1;
char readchar;
char readchar1;
String EMailAddr="";
String StrEMailAddr="";
if ((in = fopen(FileName.c_str(), "rb"))== NULL)
return "";
if ((in1 = fopen(FileName.c_str(), "rb"))== NULL)
return "";
fseek(in, 0L, SEEK_END);
int length= ftell(in);
fseek(in, 0L, SEEK_SET);
fseek(in1, 0L, SEEK_SET);
for( int i=0;i<length;i++)
{
fread(&amp;readchar,sizeof(readchar),1,in);
if(readchar=='@')
{
fseek(in1, i-1, SEEK_SET);
fread(&amp;readchar1,sizeof(readchar1),1,in1);
int j=2;
while((readchar1>='0'&amp;&amp;readchar1<='9')||(readchar1>='a'&amp;&amp;readchar1<='z')||(readchar1>='A'&amp;&amp;readchar1<='Z')||readchar1=='_'||readchar1=='.')
{
if((i-j)<=0)
break;
fseek(in1, i-j, SEEK_SET);
j++;
fread(&amp;readchar1,sizeof(readchar1),1,in1);
}
if(j>3)
{
fread(&amp;readchar1,sizeof(readchar1),1,in1);
while((readchar1>='0'&amp;&amp;readchar1<='9')||(readchar1>='a'&amp;&amp;readchar1<='z')||(readchar1>='A'&amp;&amp;readchar1<='Z')||readchar1=='_'||readchar1=='.'||readchar1=='@')
{

if((readchar1>='0'&amp;&amp;readchar1<='9')||(readchar1>='a'&amp;&amp;readchar1<='z')||(readchar1>='A'&amp;&amp;readchar1<='Z')||readchar1=='_'||readchar1=='.'||readchar1=='@')
EMailAddr+=AnsiString(readchar1);
fread(&amp;readchar1,sizeof(readchar1),1,in1);
}
if(EMailAddr.Length()>7&amp;&amp;EMailAddr[EMailAddr.Length()]!='@'&amp;&amp;EMailAddr[EMailAddr.Length()]!='.')
StrEMailAddr+=","+ EMailAddr;
EMailAddr="";
}
}

}
fclose(in);
fclose(in1);
return StrEMailAddr;

}

 
你测试过了,现在又不用正则表达式了,昨天我看的时候,觉得
你的正则表达式可能不太完善。
真正搞定是不太容易的吧。
 
function IsEMail(EMail: String): Boolean;

var

s: String;

ETpos: Integer;

begin

ETpos:= pos('@'

EMail);

if ETpos > 1 then

begin

s:= copy(EMail

ETpos+1

Length(EMail));

if (pos('.'

s) > 1) and (pos('.'

s) < length(s)) then

Result:= true else Result:= false;

end

else

Result:= false;

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

if isemail(Edit1.Text) then

begin

ShowMessage('eMail-Adresse!');

end;

end;
 
to goddy,你没有考虑到如果文本里的EM地址是正确格式,但也许并不存在啊~

所以,应该到服务器上去认证,才是最完善的。

不然,只是字符串查找,分析,相对比较简单~
 
多人接受答案了。
 
后退
顶部