Pregunta

Estoy tratando de hacer coincidir las partes de un número de versión (Major.Minor.Build.Revision) con expresiones regulares de C #. Sin embargo, soy bastante nuevo en escribir Regex e incluso usar Expresso está resultando un poco difícil. En este momento, tengo esto:

(?<Major>\d*)\.(?<Minor>\d*)\.(?<Build>\d*)\.(?<Revision>\d*)

Esto funciona, pero requiere que exista cada parte del número de versión. Lo que me gustaría hacer también es hacer coincidir versiones como:

2.13

En este caso, los grupos de compilación y revisión deben devolver valores nulos. Siéntase libre de sugerir un mejor método si me equivoco al respecto.

¿Fue útil?

Solución

(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

Hace que la tercera y cuarta partes sean opcionales.

Otros consejos

Sé que esto no es una expresión regular, pero System.Version hace todo el trabajo por usted.

Probado en VBScript, este patrón:

^(\d+)(\.\d+)?(\.\d+)?(\.\d+)?$

Validará todo lo siguiente True:

  • 23
  • 23.1
  • 23.1.1
  • 23.1.1.1

Y lo siguiente todo falso:

  • 23.11.11.33.11
  • 23.43 2.1
  • 44.11.2 3
  • 3q.4.2.1
  • 3.4.
  • 4.3.21a

Si no desea utilizar Regex, puede probar:

System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(<string filePath>);

int major = fvi.FileMajorPart;
int minor = fvi.FileMinorPart;
int build = fvi.FileBuildPart;

La respuesta anterior no funciona correctamente

(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

prueba este,

  var regularExpression = @"^(\d+\.)?(\d+\.)?(\d+\.)?(\*|\d+)$";
                var regex = Regex.IsMatch("1.0.0.0", regularExpression, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
                Console.WriteLine(regex);

Pruebe algo como esto:

(?<Major>\d*)\.?(?<Minor>\d*)?\.?(?<Build>\d*)?\.?(?<Revision>\d*)?

Simplemente agregué algunos & "; cero o uno &"; cuantificadores a los grupos de captura y también a los puntos en caso de que no estén allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top