Avatar ·

¿Por qué \d en C# funciona más lento que [0-9]?

¡Hola a todos! Soy un desarrollador C# principiante y me encontré con un problema inesperado al optimizar expresiones regulares. Tengo una tarea: verificar si una cadena consiste solo en dígitos. Escribí dos variantes de la regex: 1. `^\d+$` 2. `^[0-9]+$` Intuitivamente, parece que `\d` debería ser más rápido o al menos igual en velocidad, ya que es solo una abreviatura para dígitos. Pero hice un pequeño benchmark con `Stopwatch` en una cadena de 1000 caracteres (1000 dígitos aleatorios) y obtuve resultados impactantes: ``` \d: ~450 ticks [0-9]: ~120 ticks ``` ¡Casi 4 veces de diferencia! Además, ejecuté la prueba 100 veces para descartar la aleatoriedad. Los resultados son estables. Estoy usando .NET 6, `Regex` estándar sin flags. ¿Por qué sucede esto? Tanto `\d` como `[0-9]` deberían significar lo mismo: dígitos del 0 al 9. ¿Quizás estoy midiendo algo incorrectamente? ¿O hay algún problema con Unicode en C#? Por favor, díganme cuál es el problema y cómo escribir correctamente las regex para buscar dígitos.