Stichwort: State-Machine. (Regex ist nebenbei im Grunde auch nix anderes)
Delphi-Quellcode:
function GetNumber(const Source: string): string;
type
TParserState = (psInvalid, psValid, psDigit, psDecimalPoint, psDigitDecimals);
var
c: char;
State: TParserState;
Len: integer;
procedure Accept(c: char);
begin
inc(Len);
Result[Len] := c;
end;
begin
State := psInvalid;
Setlength(Result, length(Source));
Len := 0;
for c in Source do
begin
case State of
psValid:
begin
SetLength(Result, Len);
break; // wir gehen mal von nur einer zahl pro string aus, könnte man aber auch anpassen
end;
psInvalid:
begin
Len := 0;
if c in ['0'..'9'] then
begin
Accept(c);
State := psDigit;
end;
end;
psDigit:
begin
if c in ['0'..'9','.'] then
begin
Accept(c);
if c = '.' then
State := psDecimalPoint;
end
else
State := psValid;
end;
psDecimalPoint:
begin
if c in ['0'..'9'] then
begin
Accept(c);
State := psDigitDecimals;
end
else
State := psInvalid;
end;
psDigitDecimals:
begin
if c in ['0'..'9'] then
Accept(c)
else
State := psValid;
end;
end;
end;
end;
Das ganze ist ungetestet, soll aber auch eher als Illustration dienen...