Ver Mensaje Individual
  #5  
Antiguo 21-07-2021
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por MAXIUM Ver Mensaje
.. Creo que la expresión correcta seria la siguiente:
Código Delphi [-]
//Agregar System.RegularExpressions en los uses

function QuitarLetras(const S: string) : string;
begin
  Result := TRegEx.Replace(S, '[^1234567890]', '', [roIgnoreCase, roMultiLine]);
end;
Ambas expresiones terminan entregando el mismo resultado. Aunque, esta que propones es mas eficiente!

Métricas de Regex101:

Expresión: '([a-z])*
Pasos: 16.317
Tiempo: 36.7 ms
Link: https://regex101.com/r/HveDfl/1

Expresión: [^1234567890]
Pasos: 5.308
Tiempo: 28.6 ms
Link: https://regex101.com/r/N5WzUR/1

Pero si la modificamos un poco. Se obtiene una mas corta que reduce un poco el tiempo:

Expresión: [^0-9]
Pasos: 5.308
Tiempo: 22.6 ms
Link: https://regex101.com/r/nBVQg9/1

Código Delphi [-]
//Agregar System.RegularExpressions en los uses

function QuitarLetras(const S: string) : string;
begin
  Result := TRegEx.Replace(S, '[^0-9]', '', [roIgnoreCase, roMultiLine]);
end;

Cita:
Empezado por MAXIUM Ver Mensaje
Por otra parte ¿por qué S es declarada constante?
¡Bueno! En realidad lo copié del primer ejemplo, pero según la documentación. Cuando se trabaja con parámetros constantes de tipo string, permite al compilador optimizar el código.

Cita:
Constant Parameters
A constant (const) parameter is like a local constant or read-only variable. Constant parameters are similar to value parameters, except that you cannot assign a value to a constant parameter within the body of a procedure or function, nor can you pass one as a var parameter to another routine. (But when you pass an object reference as a constant parameter, you can still modify the object's properties.)

Using const allows the compiler to optimize code for structured - and string-type parameters. It also provides a safeguard against unintentionally passing a parameter by reference to another routine.

Here, for example, is the header for the CompareStr function in the SysUtils unit:

function CompareStr(const S1, S2: string): Integer;
Because S1 and S2 are not modified in the body of CompareStr, they can be declared as constant parameters
http://docwiki.embarcadero.com/RADSt...eters_(Delphi)
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita