怎样从一个字符串获取某个子串的后面的字符串,且这个子串不在第一位? ( 积分: 20 )

  • 主题发起人 主题发起人 rgn
  • 开始时间 开始时间
R

rgn

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样从一个字符串获取某个子串的后面的字符串,且这个子串不在第一位?
例如字符串为abcdabe,子串为ab,则获取e(因为abcdabe开头为ab,所以截取第二个ab后面的);
字符串为abbcc,子串为bb,则获取cc
 
function GetLastString(const ASrcStr, ASubStr: string): string;
var
i: Integer;
tmpSrcStr, tmpSubStr, tmpResult: string;
begin
Result := '';
if Pos(ASubStr, ASrcStr)<=0 then
Exit;
for i := Length(ASrcStr) - 1 downto 0 do
tmpSrcStr := tmpSrcStr + ASrcStr[i+1];
for i := Length(ASubStr) - 1 downto 0 do
tmpSubStr := tmpSubStr + ASubStr[i+1];
tmpResult := Copy(tmpSrcStr, 1, Pos(tmpSubStr, tmpSrcStr) - 1);
for i := Length(tmpResult) - 1 downto 0 do
Result := Result + tmpResult[i+1];
end;
 
学习了。
 
function GetSubString(Str, SubStr: string): string;
var
Idx: Integer;
begin
Result := '';
Idx := Pos(SubStr, Str);
if Idx = 0 then Exit; //没找到
if Idx = 1 then //在第一位
begin
Result := GetSubString(Copy(Str, 2, Length(Str)), SubStr); //删除第一个字符再查找
Exit;
end;
Inc(Idx, Length(SubStr));
Result := Copy(Str, Idx, Length(Str));
end;
 
posex可以滿足你的尋找位置的要求
 
function TForm1.getSub(str1, str2: string): string;
var
i,k:integer;
oldstr:string;
begin
oldstr:=str1;
Result:='';
k:=length(str2)-1;
i:=1;
while i<>0 do
begin
i:=pos(str2,str1);
if i<>0 then
delete(str1, 1, i+k);
end;
if oldstr= str1 then
Result:=''
else
Result:=str1;
end;
//注:str1:=字符串
str2:=字串;
 
同意ANiDelphi 的说法,进行两次查找,把的一次找到的标识删除;
不过要把第一记录;万一第二个没找到
 
var
iPos: Integer;
sOld, sSub, sResult: String;
begin
sOld := 'abcabe';
sSub := 'ab';
iPos := pos(sSub, sOld);
if iPos<1 then
begin
showmessage('没找到');
exit;
end;
while iPos>0 do
begin
delete(sOld, 1, iPos+length(sSub));
iPos := pos(sSub, sOld);
end;
sResult := sOld;
end;
 
var
i:integer;
abc:String;
list:TStrings;
begin
list:=Tstringlist.Create;
abc:='abcdabe';
list.text :=StringReplace(abc,'ab',#13#10,[rfReplaceAll]);
if list.count<2 then exit;
for i:=2 to list.count-1 do
showMessage(list.strings);
list.Destroy;
end;
////////////////
if list.strings[0]='' then 前面有
if list.strings[0]<>'' then前面没有
if list.count >3 then有两个子串以上
 
多人接受答案了。
 
后退
顶部