例如我想提取 "赫赫S001K-3222 J453K-345、Z444K-444ABCB456K-456dT456K-9099 ST555K-555嘻嘻SSS" 这个字符串里的特定数据提取原则:首字符以S、J、B、T开头,后面跟三位数字,再后面是K,然后是连字符- ,最后又是三位数字
我要得到的数据是:S001K-322、J453K-345、B456K-456、T456K-909、T555K-555
怎么实现??

解决方案 »

  1.   

    ^[S/J/B/T][0-9][0-9][0-9][K][-][0-9][0-9][0-9]
      

  2.   

    ^.*([S|J|B|T][0-9]{3}[K][-][0-9]{3}).*$
      

  3.   

    \s*[A][0-9][0-9][0-9][K][-][0-9][0-9][0-9]
      

  4.   

    \s*[S/J/B/T][0-9][0-9][0-9][K][-][0-9][0-9][0-9]
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    const
      EXPR_STR: string ='[S|J|B|T][0-9]{3}[K][-][0-9]{3}';
      EXAMPLE_STR: string ='赫赫S001K-3222 J453K-345、Z444K-444ABCB456K-456dT456K-9099 ST555K-555嘻嘻SSS';
    var
      RegExpr: TRegExpr;
      i:integer;
      str:string;
    begin
    str:='';
     RegExpr := TRegExpr.Create;
      try
        RegExpr.Expression := EXPR_STR;
        i:=RegExpr.SubExprMatchCount;
        if RegExpr.Exec(EXAMPLE_STR) then
        begin
        repeat
        str:=str+RegExpr.Match[0]+',';
        until not RegExpr.ExecNext;
        showmessage(str);
        end;
      finally
        FreeAndNil(RegExpr);
      end;
    end;
      

  6.   

    经测试,这两个表达式能够满足要求,似乎斜线 [/] 和竖线 [|] 效果是一样的EXPR_STR: string = '[S/J/B/T][0-9]{3}[K][-][0-9]{3}';
    EXPR_STR: string = '\s*[S|J|B|T][0-9][0-9][0-9][K][-][0-9][0-9][0-9]';