用正则表达式,不需要什么算法procedure TForm1.Button1Click(Sender: TObject);var Matches, MyTest: OleVariant; NewTestStr, TestStr: string; i: integer;begin TestStr := '网址:http://www.ainlife.cn/ 电话:0728-63667921; MyTest := CreateOleObject('VBScript.RegExp'); MyTest.Global := True; MyTest.IgnoreCase := True; MyTest.Pattern := '[/d]{3,4}-[/d]{6,11}'; //匹配一个电话号码 if MyTest.Test(TestStr) then ShowMessage('找到了电话号码'); Matches := MyTest.Execute(TestStr); //执行查找; for i := 1 to Matches.count do //显示找到的结果 begin ShowMessage(Format('找到的第%d个:%s', [i, Matches.item[i - 1]])); end; //以下是将字符串中的电话号码改为新的号码。 NewTestStr := MyTest.Replace(TestStr, '0769-85787641'); ShowMessage(NewTestStr);end;以上是个提取字符串中的电话号码的例子,只需要把 MyTest.Pattern := '[/d]{3,4}-[/d]{6,11}'; 中的内容作一点修改就可以了,具体参考VBS的正则表达式的帮助。MyTest.Pattern := '/^[1-9]/d{5}[1-9]/d{3}((0/d)|(1[0-2]))(([0|1|2]/d)|3[0-1])((/d{4})|/d{3}[A-Z])$/'这个是网上的18位身份证号码的正则表达式规则。我没有测试过。