如何从字符串中提取出电话号码???(30分)

  • 主题发起人 主题发起人 king_213
  • 开始时间 开始时间
这个问题比较模糊,主要是你的字符串的格式是什么样的?能举出例子吗?
 
判断数字的位置,取之。
 
比如说 一个字符串:str:='我这里有你要的货 请与我联系:0315-1234567 7654321'
该如何取出其中的电话号码并把它们分别在lable1和lable2中显示??
 
就用Pos和PosEx之类的解决吧。
 
呵呵,这个我完整的做个,是一个利用搜索引擎抓取福建某个行业的移动公司的手机号码,挺好用的,收益不少
 
var i,j : integer;
s : string;
s := '';
for i := 0 to Length(str)- 1 do
begin
if str in ['0'..'9','-'] then
begin
repeat
j := i;
s := s + str[j];
Inc(j);
until str[j] not in ['0'..'9','-'];
end;
end;
随便写了写,你看着改一下。
 
如果字符串是 str:='我这里有你要的20吨货 请与我联系:0315-1234567 7654321'
这样 20 是不是也取出来了??
 
电话号码就是一串有特点的数字啊。。。
可以先提取出若干个数字串后,
里面会包含电话号码,再针对电话的一些特点提取可能的电话号码(如位数)
 
方法是有点笨了,还算可以。
function GetTelNumPos(strContent,strEnum: string;var iEnd: Integer; var iPos: Integer; bFind: Boolean = True): Boolean;
var
iLength, i: Integer;
begin
Result := False;
for i := iEnd downto 1 do
begin
iPos := Pos(strContent, strEnum);
if bFind then
begin
if iPos > 0 then
begin
iPos:=i;
Result := True;
Break;
end;
end
else
begin
if iPos = 0 then
begin
iPos:=i;
Result := True;
Break;
end;
end;
end;
end;

function GetTelFromText(var strContent: string; var strTel: string;const strEnum:String): Boolean;
var
i, iLength, iBegin, iEnd: Integer;
strTmp: string;
begin
Result := False;
// strEnum:='0123456789-,.() '; 电话中允许出现在字符
strContent := Trim(strContent);
iEnd:=0;
iBegin:=0;
iLength := Length(strContent);
if GetTelNumPos(strContent,strEnum , iLength, iEnd) then
if GetTelNumPos(strContent,strEnum, iEnd, iBegin, False) then
begin
strTmp := Copy(strContent, iBegin+1, iEnd-iBegin);
if Length(strTmp) >= 7 then //电话至少要有七位数
begin
strTel := strTmp;
Result := True;
end;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
strContent, strTel,strEnum: string;
begin
memo1.Clear;
strEnum:=Edit2.Text;
strContent := Edit1.Text; //清仓大甩卖,所有商品一折出售,电话:(2548)-3546789 2458-87654321 13457896321,欲购从速
GetTelFromText(strContent, strTel,strEnum);
//当strEnum为0123456789时,结果为 13457896321
//当strEnum为012345678 9时(有空格),结果为 87654321 13457896321
//当strEnum为'012345678 9-()'时(有空格),结果(2548)-3546789 2458-87654321 13457896321
Memo1.Lines.Add(strTel);
end;
 
后退
顶部