Correspondance des parties de numéro de version avec des expressions régulières

StackOverflow https://stackoverflow.com/questions/400522

  •  03-07-2019
  •  | 
  •  

Question

J'essaie de faire correspondre les parties d'un numéro de version (Major.Minor.Build.Revision) avec des expressions régulières C #. Cependant, je suis assez nouveau pour écrire Regex et même utiliser Expresso s’avère un peu difficile. En ce moment, j'ai ceci:

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

Cela fonctionne, mais nécessite que chaque partie du numéro de version existe. Ce que je voudrais faire, c'est aussi faire correspondre les versions telles que:

2.13

Dans ce cas, les groupes de construction et de révision doivent renvoyer des valeurs nulles. N'hésitez pas à suggérer une meilleure méthode si je m'y prends mal.

Était-ce utile?

La solution

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

Rend les troisième et quatrième parties facultatives.

Autres conseils

Je sais que ce n'est pas une regex, mais System.Version fait tout le travail pour vous.

Testé en VBScript, ce modèle:

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

Validera tous les vrais suivants:

  • 23
  • 23.1
  • 23.1.1
  • 23.1.1.1

Et tous les faux suivants:

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

Si vous ne souhaitez pas utiliser Regex, vous pouvez essayer:

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

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

La réponse ci-dessus ne fonctionne pas correctement

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

essayez celui-ci,

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

Essayez quelque chose comme ça:

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

J'ai simplement ajouté des " zéro ou un " quantificateurs aux groupes de capture et aux points au cas où ils ne seraient pas là.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top