a:='123456[7]890';
b:='1[2345]67890';请问StringReplace可不可以将[]之间包括[]的字符去掉?

解决方案 »

  1.   

    如果出现多次,适当的加个循环就可以了var
      StartIndex,EndIndex:Integer;
      ReplaceStr,DestStr,ResultStr:string;
    begin
      DestStr:= '1[2345]67890';
      Edit1.Text:=DestStr;
      StartIndex:=pos('[',DestStr);
      EndIndex:=pos(']',DestStr);
      ReplaceStr:=copy(DestStr,StartIndex,EndIndex-StartIndex+1);
      Edit2.Text:=ReplaceStr;
      Edit3.Text:=StringReplace(DestStr,ReplaceStr,'',[rfReplaceAll]);
    end;
      

  2.   

    可以用正则表达式。操作系统有标准的组件支持。
    参考如下代码:
    uses ComObj;procedure TForm1.Button1Click(Sender: TObject);
    var
      vRegExp: OleVariant;
    begin
      vRegExp := CreateOleObject('VBScript.RegExp'); // 创建正值对象
      vRegExp.Pattern := '\[.*?\]'; // 样板表达式
      vRegExp.Global := True;
      ShowMessage(vRegExp.Replace('123[456]789ab[cd]ef', '')); //123789abef
      vRegExp := NULL;
    end;
      

  3.   

    use regular expressions in Delphi
      

  4.   

    TPerlRegEx.zip