Frage

Ich versuche, die Teile einer Versionsnummer (major.minor.build.revision) mit C # regulären Ausdrücken zu entsprechen. Allerdings bin ich ziemlich neu zu Regex schreiben und sogar mit Expresso ein wenig schwierig erweist. Gerade jetzt, ich habe dies:

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

Dies funktioniert, aber erfordert, dass jeder Teil der Versionsnummer vorhanden ist. Was möchte ich tun, ist auch passen Versionen wie:

2.13

In diesem Fall wird die Revisions- und Build müssen Gruppen Nullwert zurückzukehren. Fühlen Sie sich frei, eine bessere Methode vorschlagen, wenn ich über diese falsch werde.

War es hilfreich?

Lösung

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

Macht die dritten und vierten Teil optional.

Andere Tipps

Ich weiß, das ist kein regex, aber System.Version macht die ganze Arbeit für Sie.

Getestet in VBScript, dieses Muster:

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

Wird validieren alle folgenden True:

  • 23
  • 23.1
  • 23.1.1
  • 23.1.1.1

Und die folgend alle falsch:

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

Wenn Sie Regex nicht verwenden möchten, können Sie versuchen:

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

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

Über Antwort nicht richtig funktioniert

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

versuchen diese,

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

Versuchen Sie etwas wie folgt aus:

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

ich einfach ein paar „Null oder Eins“ quantifiers an den Fänger Gruppen hinzugefügt und auch auf die Punkte nur für den Fall sie nicht da ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top