Passende Versionsnummer Teile mit regulären Ausdrücken
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.
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.