我有一些字符串为:
adc123
adc456
ddaa555现在我只需要取出
123
456
555

解决方案 »

  1.   

    如果你的字符串不是字母和数字混乱组合的话,用leftstr先找出第一个数字的位子,然后rightstr直接取右边的部分就可以了。
    或者用stringreplace把字母替换成''
      

  2.   

    var
      I, J: Integer;
      S, T: string;
      C: Char;
    begin
      {本例子只能去楼主指定格式的字符, 假设楼至指定的字符在 Memo1 中}
      for J := 0 to Memo1.Lines.Count - 1 do
      begin
        S := Memo1.Lines.Strings[J];
        T := '';
        for I := 1 to Length(S) do
        begin
          C := S[I];
          if (C in ['0' .. '9']) then
            T := T + C;
        end;
        Memo1.Lines.Add(T)
      end;
    end;
      

  3.   

    你要说清楚规律啊
    如果遇到第一个数字,截去后面部分,可以这样:
    for i := 1 downto length(str) do
    begin
      if str[i] in ['0'..'9'] then
      begin
        result := rightstr(str, length(str)-i+1);
        break;
      end;
    end;
      

  4.   

    如果你要取出的字符串里的数字全是连续的可以用这个//从一个字符串中取得所有的数字
    function GetNumFromStr(const str: String;const hex:boolean=false): String;
    var
     i:integer;
     charset:Set of char;
    begin
    if hex then
     charset:=['0'..'9','a'..'f','A'..'F','.']
    else
     charset:=['0'..'9','.'];
    for i := 1 to Length(str) do
      begin
        if (str[i] in charset) then
          result:= result + uppercase(str[i]);
      end;
    end;
      

  5.   

    var
      s: TStrings;
      reg:TPerlRegEx;
      i: Integer;
    begin
      s:=TStringList.Create;
      s.Add('adc123');
      s.Add('sdsd456');
      s.Add('addddaa555');
      reg:=TPerlRegEx.Create(nil);
      for i:= 0 to s.count -1 do
      begin
      reg.Subject:= s[i];
      reg.regex:='\d{3}';
      while reg.MatchAgain do
      Memo1.Lines.Add(reg.MatchedExpression);
      end;
      s.Free;
    reg.Free
    end;