3

AとBの間のランダム文字列を抽出するにはどうすればよいですか。例:

ランダムストリングB

4

3 に答える 3

16

「randomstring」に囲み文字列「A」または「B」が含まれていないと仮定すると、pos への 2 つの呼び出しを使用して文字列を抽出できます。

function ExtractBetween(const Value, A, B: string): string;
var
  aPos, bPos: Integer;
begin
  result := '';
  aPos := Pos(A, Value);
  if aPos > 0 then begin
    aPos := aPos + Length(A);
    bPos := PosEx(B, Value, aPos);
    if bPos > 0 then begin
      result := Copy(Value, aPos, bPos - aPos);
    end;
  end;
end;

A または B が見つからない場合、関数は空の文字列を返します。

于 2012-12-31T09:21:36.093 に答える
3

別のアプローチ:

function ExtractTextBetween(const Input, Delim1, Delim2: string): string;
var
  aPos, bPos: Integer;
begin
  result := '';
  aPos := Pos(Delim1, Input);
  if aPos > 0 then begin
    bPos := PosEx(Delim2, Input, aPos + Length(Delim1));
    if bPos > 0 then begin
      result := Copy(Input, aPos + Length(Delim1), bPos - (aPos + Length(Delim1)));
    end;
  end;
end;

Form1.Caption:= ExtractTextBetween('something?lol/\http','something?','/\http');

結果=笑

于 2012-12-31T09:29:30.117 に答える
3

正規表現で答えてください:)

uses RegularExpressions;
...
function ExtractStringBetweenDelims(Input : String; Delim1, Delim2 : String) : String;


var
  Pattern : String;
  RegEx   : TRegEx;
  Match   : TMatch;

begin
 Result := '';
 Pattern := Format('^%s(.*?)%s$', [Delim1, Delim2]);
 RegEx := TRegEx.Create(Pattern);
 Match := RegEx.Match(Input);
 if Match.Success and (Match.Groups.Count > 1) then
  Result := Match.Groups[1].Value;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ShowMessage(ExtractStringBetweenDelims('aStartThisIsWhatIWantTheEnd', 'aStart', 'TheEnd'));
end;
于 2012-12-31T14:49:01.693 に答える