Hay un par de formas de hacerlo. Puede dividir la cadena en el carácter de espacio y luego alimentarlo en TStringList. Luego puede usar la propiedad Value [String] de TStringList para obtener el valor de un nombre dado.
Para hacer esto, use una cadena sustituir de todos los espacios con comas:
newString := StringReplace(oldString, ' ', ',', [rfReplaceAll]);
luego importar el resultado en un TStringList:
var
MyStringList : TStringList;
begin
MyStringList := TStringList.Create;
try
MyStringList.CommaText := StringReplace(oldString, ' ', ',', [rfReplaceAll]);
Result := MyStringList.Values['email'];
finally
MyStringList.Free;
end;
end;
esto le dará el valor de correo electrónico. Luego deberá dividir la cadena en el símbolo "@", que es un ejercicio relativamente trivial. Por supuesto, esto solo funciona si los espacios son genuinamente un delimitador entre campos.
otra posibilidad es utilizar una expresión regular, pero Delphi no admite de forma nativa los (que había necesidad de una biblioteca de expresiones regulares - ver here)
*** Smasher señaló (D2006 +) Delimitador/texto delimitado por el cual se vería algo como esto:
MyStringList.Delimiter := ' ';
MyStringList.DelimitedText := oldString;
Result := MyStringList.Values['email'];
¿Por Downvote? Esta es una pregunta válida en mi humilde opinión. – jpfollenius
sí, pero podría haber buscado una palabra de correo electrónico, omita el '=', buclee cada carácter hasta que toque @ ... – Skuta
No, porque 'correo electrónico' puede ocurrir en cualquier lugar, dentro de un valor anterior, dentro de un antiguo nombre de la propiedad ... – jpfollenius