去除字符串中的字母
遇到一个问题,一列用户名数据中有这样的情况,如“张三 ZJ”,“李四 N Y ”,现在不需要后面的字母信息了,能有效率高点的算法吗?各位给推荐一个?
谢谢
我自己写了一个,效率太低,大家批评一下:
--更新用户名后面的字母信息,如“ZJ”等信息 Declare @vctel varchar(20) Declare @vcName varchar(20) Declare @vcRe varchar(20) Declare @Leng int Declare @Temp varchar(2) Declare Check_Name cursor for select vctel, vcName from userinfo where vcName<>'' Open Check_Name Fetch Next from Check_Name into @vctel,@vcName While @@Fetch_Status=0 begin set @Leng=len(@vcName) while @Leng>0 begin set @Temp=substring(@vcName,@Leng,1) --从后往前找 if (ASCII(@Temp) between 65 and 90) or (ASCII(@Temp) between 97 and 122) --大小写字母 begin set @Temp='' end set @vcRe=@Temp+@vcRe set @Leng=@Leng-1 end Update userinfo set vcName=@vcRe where current of Check_Name set @vcRe='' Fetch Next from Check_Name into @vctel,@vcName end Close Check_Name DealLocate Check_Name
uses PerlRegEx;procedure TForm1.btn1Click(Sender: TObject);var reg:TPerlRegEx;begin reg:=TPerlRegEx.Create(nil); try reg.Subject:='张三 abc de 数据'; reg.RegEx:='[a-zA-Z ]' ; reg.Replacement:=''; reg.ReplaceAll; Showmessage(reg.Subject); finally reg.Free; end;end;
[解决办法]
试试这个
function ReNameStr(DestStr:string):string:
var
StrLength:Integer;
ReStr:string;
begin
StrLength := Length(DestStr);
while StrLength >0 do
begin
if not((DestStr[StrLength] in ['a'..'z'])
or(DestStr[StrLength] in ['A'..'Z'])
or(DestStr[StrLength]=' ')) then
begin
ReStr:=Copy(DestStr,1,StrLength);
StrLength := -1;
end;
Dec(StrLength);
end;
Result := ReStr;
end;