如何获得我需要的字符串的某些部分?

accountid=xxxxxx 类型=prem servertime=1256876305 addtime=1185548735 validuntil=1265012019 用户名=noob directstart=1 Protectfiles=0 rsantihack=1 plustrafficmode=1 镜像= jsconfig=1 email=noob@live.com 很多=0 fpoints=6076 ppoints= 149 curfiles=38 curspace=3100655714 bodkb=60000000 premkbleft=25000000 ppointrate=116

我想要 email= 之后的数据,但直到 live.com。?

有帮助吗?

解决方案

有几个方法可以做到这一点。你可以在空格字符分割字符串然后将其送入TStringList中。然后,您可以使用TStringList中的价值[字符串]属性来获取给定的名称的值。

要做到这一点,做一个字符串替换用逗号所有的空格组成:

newString := StringReplace(oldString, ' ', ',', [rfReplaceAll]);

然后将结果导入到的TStringList:

var
  MyStringList : TStringList;
begin
  MyStringList := TStringList.Create;
  try
    MyStringList.CommaText := StringReplace(oldString, ' ', ',', [rfReplaceAll]);
    Result := MyStringList.Values['email'];
  finally
    MyStringList.Free;
  end;
end;

这会给你的电子邮件值。然后,您需要将字符串的“@”符号这是一个相对简单的工作分开。当然,这仅适用如果空间是真正的场之间的分隔符。

另外,您可以使用正则表达式,但德尔福不支持那些本身(你需要一个正则表达式库 - 看的此处

***粉碎机注意到(D2006 +)定界符/分隔文本这将看起来像这样:

MyStringList.Delimiter := ' ';
MyStringList.DelimitedText := oldString;
Result := MyStringList.Values['email'];

其他提示

我的想法:

  1. 用 CRLF 替换空格(它是空格分隔的)
  2. 加载到 TStringList
  3. 使用带有“电子邮件”名称的值属性

下面的代码只能如果值包含空格:

uses
  StrUtils, Classes;

....

function GetPropertyValue (const PropertyName : String; const InputString : String) : String;
var
  StringList : TStringList;
  Str : String;
begin
Result := '';
StringList := TStringList.Create;
try
  StringList.Delimiter := ' ';
  StringList.DelimitedText := InputString;
  for Str in StringList do
    if StartsText (PropertyName + '=', Str) then
      Result := RightStr (Str, Length (Str) - Length (PropertyName) - 1);    
finally
  FreeAndNil (StringList);
end;
end;

另一个想法,你也可以使用PosEx(StrUtils)与文本StringList的:

function ExtractMyString(SrcStr, FromStr, ToStr: string): string;
var
  posBeg, posEnd: integer;
begin
  Result := '';
  posBeg := Pos(FromStr, SrcStr) + Length(FromStr);
  posEnd := PosEx(ToStr, SrcStr, posBeg);

  if (posBeg > 0) and (posEnd > posBeg) then
    Result := Copy(SrcStr, posBeg, posEnd-posBeg);
end;

用法:

ExtractMyString(StringList.Text, 'email=', ' lots=');

当然,这将仅在源串始终格式化以同样的方式工作,对于将根据需要提取的其他数据是方便的。

假设字符串在变量“s”的保持,并且“TMP”是另一个字符串变量,

i:= pos ('email=', s);
tmp:= '';
inc (i);
while s[i] <> ' ' do
 begin
  tmp:= tmp + s[i]; 
  inc (i);
 end;

'TMP' 将保存地址

在这个顺序与分割字符串转换为字符串数组,使用“=”作为deliminator,您将有一个数组:“键”,那么“价值”然后你可以遍历寻找“电子邮件”键,然后只需添加1到数组索引来获取值。但是这可能在很多方面失败(例如,一些一个进入“=”作为一个字符),或有在值字段空字符串

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top