比如有一个文本中,有一句 “你是第122名”,122是不确定的,有没有快速的方法能找出这一句?
最好是这样的,用 你是第*名,然后自动就把这一句读取出来了或者是读出122

解决方案 »

  1.   

    正则表达式可以查出  你是第(\d+)名
    ------procedure TForm1.btn7Click(Sender: TObject);
    var
      reg : TPerlRegEx;
      i ,j,k: Integer;
      StrArr : TStringDynArray;
      tmpStr : String;
      pStr : WideString;
      tsl : TStringList;
      strQuery : String;
      strcondition : String;
    begin
      StrArr := nil;  pStr := edt4.Text;
      tsl := TStringList.Create;
      reg := TPerlRegEx.Create(nil);
      try    reg.RegEx := edt4.Text;
        reg.Options := [preSingleLine];
        reg.Subject := WideString(mmo3.Text);
        tmpStr := '';
        if reg.Match then
        begin
          repeat
            tmpStr := tmpStr + reg.MatchedExpression + ' ';      until not reg.MatchAgain ;
        end;
        mmo4.Lines.Text := tmpStr;  finally
        reg.Free;
        tsl.Free;
      end;
    end;
      

  2.   

     把edt4.Text换为‘你是第(\d+)名’
      

  3.   

    procedure TForm1.FormCreate(Sender: TObject);
      function SearchIt(Src: PChar): PChar;
      var
        P: PChar;
      label _notFound;
      begin
        P := AnsiStrPos(Src, PChar('你是第'));
        if P = nil then goto _notFound;
        Result := P;    Inc(P, 6);
        while P^ in ['0'..'9'] do Inc(P);
        if (P - Result = 6) or (P <> AnsiStrPos(P, '名')) then goto _notFound;    Exit;  _notFound:
        Result := nil
      end;var
      S: string;
    begin
      S := SearchIt('aaa你是第123名');//返回“你是第123名”
      S := SearchIt('aaa你是第a123名');//返回空
      ShowMessage(S);
    end;