字符串有关问题!请大家帮忙看看
字符串问题!请大家帮忙看看!
字符串str1=13568952141,5971612
str2=6616519,13026587478,13678954624
请问怎么把这些字符串中的手机号码提取出来呢?
上面两个字符串提取出来就是三个手号码
------解决方案--------------------
不知道具体字符串会不会太长?
如果就如上面两个字符串的话:
可以用 pos,copy函数把以‘,’分开的子串截取出来
取长度为11的子串即可
------解决方案--------------------
找‘13’后面9个,如果是数字就COPY出来!
------解决方案--------------------
function TForm1.RegExpTest(mPattern: WideString; mString: WideString; mGlobal: Boolean; mIgnoreCase: Boolean; // 忽略大小写
mOutputs: TStrings
): Boolean;
var
vRegExp, vMatch, vMatches: OleVariant;
I: Integer;
begin
vRegExp := CreateOleObject( 'VBScript.RegExp '); // 创建正值对象
vRegExp.Pattern := mPattern; // 样板表达式
vRegExp.IgnoreCase := mIgnoreCase; // 忽略大小写
vRegExp.Global := mGlobal; // 全局适用
Result := vRegExp.Test(mString);
if Assigned(mOutputs) then
begin
mOutputs.Clear;
vMatches := vRegExp.Execute(mString); // 执行搜索
for I := 0 to vMatches.Count - 1 do
begin
vMatch := vMatches.Item[I];
mOutputs.Add(vMatch.Value);
vMatch := NULL;
end;
end;
vMatches := NULL;
vRegExp := NULL;
end; { RegExpTest }
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if RegExpTest(memo2.text, Memo3.Text, True, True, Memo1.Lines) then
Caption := 'True '
else
Caption := 'False ';
end;
测试正则表达式的代码。
------解决方案--------------------
procedure TForm1.FormCreate(Sender: TObject);
var
sl: TStringList;
i: integer;
s: string;
begin
sl := TStringList.Create;
s := StringReplace( '13568952141,5971612 ', ', ', #13, [rfReplaceAll]);
s := s + #13 + StringReplace( '6616519,13026587478,13678954624 ', ', ', #13, [rfReplaceAll]);
sl.Text := s;
for i := sl.Count - 1 downto 0 do
if pos( '13 ', sl[i]) <> 1 then
sl.Delete(i);
ShowMessage(sl.Text);
FreeAndNil(sl);
end;
字符串str1=13568952141,5971612
str2=6616519,13026587478,13678954624
请问怎么把这些字符串中的手机号码提取出来呢?
上面两个字符串提取出来就是三个手号码
------解决方案--------------------
不知道具体字符串会不会太长?
如果就如上面两个字符串的话:
可以用 pos,copy函数把以‘,’分开的子串截取出来
取长度为11的子串即可
------解决方案--------------------
找‘13’后面9个,如果是数字就COPY出来!
------解决方案--------------------
function TForm1.RegExpTest(mPattern: WideString; mString: WideString; mGlobal: Boolean; mIgnoreCase: Boolean; // 忽略大小写
mOutputs: TStrings
): Boolean;
var
vRegExp, vMatch, vMatches: OleVariant;
I: Integer;
begin
vRegExp := CreateOleObject( 'VBScript.RegExp '); // 创建正值对象
vRegExp.Pattern := mPattern; // 样板表达式
vRegExp.IgnoreCase := mIgnoreCase; // 忽略大小写
vRegExp.Global := mGlobal; // 全局适用
Result := vRegExp.Test(mString);
if Assigned(mOutputs) then
begin
mOutputs.Clear;
vMatches := vRegExp.Execute(mString); // 执行搜索
for I := 0 to vMatches.Count - 1 do
begin
vMatch := vMatches.Item[I];
mOutputs.Add(vMatch.Value);
vMatch := NULL;
end;
end;
vMatches := NULL;
vRegExp := NULL;
end; { RegExpTest }
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if RegExpTest(memo2.text, Memo3.Text, True, True, Memo1.Lines) then
Caption := 'True '
else
Caption := 'False ';
end;
测试正则表达式的代码。
------解决方案--------------------
procedure TForm1.FormCreate(Sender: TObject);
var
sl: TStringList;
i: integer;
s: string;
begin
sl := TStringList.Create;
s := StringReplace( '13568952141,5971612 ', ', ', #13, [rfReplaceAll]);
s := s + #13 + StringReplace( '6616519,13026587478,13678954624 ', ', ', #13, [rfReplaceAll]);
sl.Text := s;
for i := sl.Count - 1 downto 0 do
if pos( '13 ', sl[i]) <> 1 then
sl.Delete(i);
ShowMessage(sl.Text);
FreeAndNil(sl);
end;